SQLで場合分けってどうやってするの?
CASE式ってどうやって使うの?
わかりやすく教えてほしい!
こういった疑問にこたえます。
エンジニアの僕がわかりやすく解説します。
CASE式とは
CASE式は、CASE(場合)という名前が示すように、「場合分け」を行う場合に使います。
この場合分けのことを条件分岐とも言います。
CASE式の構文は次の通りです。
CASE
WHEN <評価式> THEN <式>
WHEN <評価式> THEN <式>
WHEN <評価式> THEN <式>vv
・
・
・
ELSE <式>
END
<評価式>とは、戻り値が真理値になるような式のことです。
=、!=、LIKEやBETWEENといった術後を使って作る式だと考えてください。
CASE式は最初のWHEN句の評価式から評価していきます。
もし、評価式の戻り値が真(TRUE)ならば、THEN句で指定された式が戻されてCASE式が終了します。
もし、評価式の戻り値が真でなければ、次のWHEN句の評価に移ります。
もし、どのWHEN句の評価式にも当てはまらない場合はELSEで指定された式が返され、CASE式が終了します。
CASE式の使い方
実際にCASE式を使ってみましょう。
例えば、次のようなshohinテーブルがあったとします。
shohin_mei | bunrui | kakaku |
バナナ | 食品 | 100 |
鉛筆 | 事務用品 | 50 |
フライパン | キッチン用品 | 200 |
Tシャツ | 衣類 | 1500 |
ボールペン | 事務用品 | 200 |
プリン | 食品 | 150 |
このshohinテーブルのbunruiについて、表示を変えて出力したいとします。
食品の場合は「A:食品」、事務用品の場合は「B:事務用品」、食品と事務用品以外は「C:その他」と出力するには次のようにSQLを記述します。
SELECT
shohin_mei,
CASE
WHEN bunrui = '食品' THEN 'A:' || bunrui
WHEN bunrui = '事務用品' THEN 'B:' || bunrui
ELSE 'C:その他'
END AS abc_bunrui,
kakaku
FROM shohin;
実行結果
shohin_mei | abc_bunrui | kakaku |
バナナ | A:食品 | 100 |
鉛筆 | B:事務用品 | 50 |
フライパン | C:その他 | 200 |
Tシャツ | C:その他 | 1500 |
ボールペン | B:事務用品 | 200 |
プリン | A:食品 | 150 |
CASEの使い方まとめ
解説の内容をまとめます。
- CASE式は場合分けを行う場合に使用する
- 評価式とは真理値を返す式のこと
- 評価式を上から順に評価し、真であればTHEN句の式返す
- ELSEはどの評価式にも当てはまらなかった場合に返す式を記述する
以上、お疲れ様でした。
コメント