SQLを学び始めてしばらくすると、「条件によって表示内容を変えたい」という場面に出会う可能性があります。 たとえば「点数が90以上なら“優”、それ以外なら“良”や“可”を出したい」といったケースです。 このとき活躍するのが、CASE式です。
CASE式は、SQLの世界でいうjavaの「if文」や「switch文」のようなものです。 1つの条件を見て、「このときはこれ、それ以外はこれ」といった分岐を実現できます。 特にSELECT文の中で使うと、結果を人が見やすい形に変えたり、分類したりできます。
CASE式の書き方は2パターンあります。
MySQLのCASE式には、次の2種類があります。 これはMySQL公式マニュアルでも説明されています。(dev.mysql.com )
① 単純なCASE(値で分岐)
CASE 式
WHEN 値1 THEN 結果1
WHEN 値2 THEN 結果2
ELSE 結果その他
END
「値が何かによって分けたい」ときに使います。 たとえば、grade列が「A」「B」「C」のどれかなら、次のように評価を変えられます。
例
SELECT
student,
grade,
CASE grade
WHEN 'A' THEN '優'
WHEN 'B' THEN '良'
WHEN 'C' THEN '可'
ELSE 'その他'
END AS 評価
FROM scores;
gradeがAなら「優」、Bなら「良」、Cなら「可」、それ以外なら「その他」となります。
② 検索CASE(条件式で分岐) こちらは「値が範囲に入るか」「複数条件をチェックしたい」ときに使います。
CASE
WHEN 条件1 THEN 結果1
WHEN 条件2 THEN 結果2
ELSE 結果その他
END
たとえば、点数で判定したいとき: 例
SELECT
name,
score,
CASE
WHEN score >= 90 THEN '優'
WHEN score >= 75 THEN '良'
WHEN score >= 60 THEN '可'
ELSE '不可'
END AS 判定
FROM test_results;
このように、条件式そのものをWHENの中に書けるため、柔軟な使い方ができます。
ELSEの書き忘れに注意
ELSEは省略できますが、省略すると、どの条件にも当てはまらなかった場合にNULL(値なし)が返ります。 初心者のうちはエラーの原因になりやすいので、必ず書いておくのがおすすめです。
CASE式の「型」に気をつけよう
THENやELSEで返す値の型(数値・文字列など)は、できるだけ統一してください。 「Aのとき文字列」「Bのとき数値」などが混ざると、暗黙変換が起きて想定外の結果になることがあります。 たとえば次のような書き方は避けましょう。 例
CASE
WHEN score >= 90 THEN '優'
ELSE 1 -- 数値を返してしまっている!
END
この場合、返り値の型が不統一なので、思わぬ型変換やNULLが出る場合があります。
NULL値の扱いにも注意
SQLでは、NULLは「何もない」という特別な値で、 比較演算(=や<>)では真にも偽にもなりません。 したがって次のように書いても一致しません。 例
CASE grade
WHEN NULL THEN '未入力' -- これではヒットしない
ELSE '入力あり'
END
NULLを判定したい場合は、WHEN grade IS NULL と書きます。 これは、MySQL公式でも強調されています。>(mysqltutorial.org)
CASE式が使える場所
CASE式は「値を返す」構文なので、いくつもの場面で使えます。
SELECT句:表示する値を変える
ORDER BY句:並び順を条件で変える
UPDATE句:条件によって更新値を変える
GROUP BYやHAVINGと組み合わせ:集計条件を変える
特にSELECT内で使うと、「表を加工して見やすくする」「分類を同時に行う」など、 SQLでのデータ処理が一気に広がります。
まとめ
-CASE式はSQLの「if文」
-構文は「単純CASE」と「検索CASE」の2種類
-ELSEとENDは忘れずに
-型やNULLの扱いに注意
-SELECTやORDER BYなど、さまざまな場面で利用可能
参考文献
-MySQL 公式マニュアル「CASE 式/CASE ステートメント」
-DataCamp「MySQL CASE Expression: Usage & Examples」
-W3Schools「MySQL CASE Statement」
-MySQLTutorial「MySQL CASE Expressions」
-DigitalOcean Community「How To Use CASE Expressions in SQL」
-達人に学ぶsql徹底指南書 第2版 初級者で終わりたくないあなたへ(翔泳社)
- 閲覧数 5
コメントを追加