Q1次のうち、IIF(条件式, X, Y) の説明として正しいものはどれですか。
関数 ④ — IF / IIF で 1 条件の分岐表示
SQL の関数記事 4 本目です。IF / IIF で 1 つの条件を真偽分岐する書き方、WHERE との違い、LIKE や AND との組み合わせ、ORDER BY や LIMIT を重ねた表示まで、CSV の社員データで学べます。
本記事で使うデータ — staff テーブル
ここまで関数を 3 本にわたって学んできましたが、本記事と次の 2 本では 条件分岐で表示内容を切り替える 書き方を扱います。同じ列の値でも、ある条件を満たすかどうかで「高給」「通常」のような分類ラベルを付けたり、複数の値を 1 つの結果列にまとめたりできるようになります。
IF / IIF — 1 つの条件で値を切り替える
条件式に応じて表示する値を切り替える、もっとも基本の関数が IF / IIF です。書き方は次のとおりで、両者は 完全に同じ意味 です。
- MySQL: IF(条件式, 真のときの値, 偽のときの値)
- 本講座のコンソール / SQL Server: IIF(条件式, 真のときの値, 偽のときの値)
本講座のコンソールには IF 関数が無いので、本記事の演習では IIF を使います。WHERE と違って 行を絞り込まずに、結果列の値だけを変える 役割なので、「全行を残しつつ、列の値ごとに表示ラベルを変えたい」場面で使います。
-- 1) リテラルでの動作確認
SELECT IIF(100 < 200, '真', '偽'); -- '真'
SELECT IIF(500 > 1000, '真', '偽'); -- '偽'
-- 2) 列を使った例 — city が Tokyo なら「本社」、それ以外は「支社」
SELECT name, city,
IIF(city = 'Tokyo', '本社', '支社') AS office
FROM staff;
-- 参考: MySQL では IF()
-- SELECT IF(city = 'Tokyo', '本社', '支社') FROM staff;
WHERE と IF の役割の違い — 行を消す vs 値を変える
WHERE と IF はどちらも条件式を書きますが、結果はまったく異なります。
- `WHERE`: 条件が TRUE の行 だけ残し、FALSE / NULL の行は 消す
- `IF` / `IIF`: すべての行を 残し、列の値だけ条件で 入れ替える
両者は組み合わせて使えます。「東京在住の社員だけ表示し、その人ごとに給料ランクを高給 / 通常で分けたい」のように、まず WHERE で行を絞り、続く SELECT の列リストで IIF を使って表示変換する、というのが典型的な書き方です。
-- WHERE と IIF を組み合わせる
-- 1) WHERE で大阪在住の社員だけに絞り込む
-- 2) IIF で給料 6,000,000 以上を「シニア」に分類
SELECT name, salary,
IIF(salary >= 6000000, 'シニア', '一般') AS grade
FROM staff
WHERE city = 'Osaka';
LIKE や AND との組み合わせ、ORDER BY / LIMIT との重ね方
IIF の条件式には WHERE と同じ式が書けるので、LIKE(パターンマッチ)や AND / OR(複合条件)と組み合わせられます。「名前に Tanaka を含むなら田中姓ラベル」「30 歳以上かつ Tokyo 在住ならエース」のような分岐も 1 行で書けます。
結果列に付けた AS 別名 は `ORDER BY` の対象 にも使えるので、IIF で生成したラベル列で並び替えたり、続けて LIMIT で件数制限したりするのが、実務でのレポート出力の基本パターンです。
-- 1) IIF + LIKE: 苗字が Tanaka なら '田中姓'
SELECT name,
IIF(name LIKE '%Tanaka', '田中姓', 'その他') AS surname_check
FROM staff;
-- 2) IIF + AND: 年齢相当 + 都市の複合条件
SELECT name, birthday, city,
IIF(strftime('%Y', birthday) <= '1989' AND city = 'Osaka',
'大阪のシニア', 'その他') AS tag
FROM staff;
理解度チェック
まずは1問ずつ答えてみましょう。
Q2WHERE と IIF の役割の違いとして正しいものはどれですか。
Q3MySQL の IF(salary >= 5000000, '高給', '通常') を本講座のコンソールで動かすときの正しい書き換えはどれですか。