MySQLのCASE式とは? 基本構文・使い方を初心者にわかりやすく解説

  •  
 
suu が に投稿

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版 初級者で終わりたくないあなたへ(翔泳社)

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。