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
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。