本記事では、CASE式について解説します。
前回はOUTER JOINについて解説しました。
今回では、CASE式を使った条件分岐についてみていきましょう。
SQLのCASEとは?
CASE式とは、SQLにおける条件分岐を行うもののことです。
CASE式を使うことで、特定の条件によって表示内容を変更することができるようになります。
たとえば、テストの点が50点以上なら「合格」、50点未満なら「不合格」と表示を分けることが可能です。
SQLのCASEの使い方
CASE式の具体的な使い方についてみていきましょう。
次の項目に従って解説していきます。
- CASEで条件分岐を行う
- CASEで3つ以上の条件分岐を行う
- CASEとWHEREを組み合わせる
- CASEとLIKEを組み合わせる
なお、今回は『SQL入門編1』で作成したテーブルを使って解説します。『SQL入門編1』で演習用のテーブルを作っていない方は、【SQL入門編1】初心者必見!SQLのクエリの書き方を学ぼうを読んで予め作成してくださいね。
CASEで条件分岐を行う
CASE式で条件分岐を行う方法を紹介します。
CASEは主にSELECTで使います。
○コード例
SELECT
name,TestScore,
CASE
WHEN 50 <= TestScore THEN "合格"
ELSE "不合格"
END
FROM TEST.Student;
○実行結果
上記は一番単純なCASE式です。
CASE式を使う場合、一番始めに「CASE」と書き、終わりに「END」と書きます。
そしてその中に、条件分岐を書いていきます。
条件分岐を書く場合は、WHENを使います。
上記ではWHENの後に、条件式として「TestScore >= 50」と記述しています。
これは「TestScoreが50以上の場合に」という意味になります。
その次の「THEN “合格”」は、条件に当てはまる場合に表示する文字列のことです。
つまりこの一文は、「TestScoreが50以上の場合に『合格』と表示する」という意味になります。
その下のELSEは、WHENの条件式に当てはまらない場合の処理を表します。
今回は「ELSE “不合格”」となっているので「TestScoreが50以上ではない場合『不合格』と表示する」という意味になります。
このように、CASE式を書くことによって、TestScoreの点数によって、『合格』『不合格』の表示分けができました。
これがCASE式の基本となります。
なお、実行結果を見て分かる通り、カラム名が長くて少し見にくいですよね。
CASE式にもASを使って別名を付けることが可能です。
○コード例
SELECT
name,TestScore,
CASE
WHEN 50 <= TestScore THEN "合格"
ELSE "不合格"
END
AS 合否
FROM TEST.Student;
○実行結果
CASE式に『合否』という別名をつけたので、実行結果が見やすくなりました。
CASEで3つ以上の条件分岐を行う
つづいて、CASE式で3つ以上の条件分岐を行いましょう。
3つ以上の条件分岐を行う場合は、WHENを2回使います。
○コード例
SELECT
name,TestScore,
CASE
WHEN 50 <= TestScore THEN "合格"
WHEN 40 <= TestScore THEN "もう少し"
ELSE "不合格"
END
AS 合否
FROM TEST.Student;
○実行結果
上記のSQL文ではWHENによって3つの条件分岐を作っています。
1つ目のWHENでTestScoreが50以上のときに『合格』と表示しています。
WHENの条件に当てはまらない場合、次のWHENに以降します。
2つ目のWHENでTestScoreが40以上のときに『もう少し』と表示しています。
そして、このWHENの条件にも当てはまらない場合に、ELSEによって『不合格』と表示します。
このように、WHENを2つ使って3つの条件分岐を作っています。
4つ以上の条件分岐を作る場合も、同じ要領で行います。
○コード例
SELECT
name,TestScore,
CASE
WHEN 80 <= TestScore THEN "ランクA"
WHEN 60 <= TestScore THEN "ランクB"
WHEN 40 <= TestScore THEN "ランクC"
WHEN 20 <= TestScore THEN "ランクD"
ELSE "ランクF"
END
AS ランク
FROM TEST.Student;
○実行結果
上記のSQL文ではWHENを4つ使って、5つの条件分岐を作っています。
CASEとWHEREを組み合わせる
CASE式はWHERE句と組み合わせることも可能です。
○コード例
SELECT
name,TestScore,
CASE
WHEN 80 <= TestScore THEN "ランクA"
WHEN 60 <= TestScore THEN "ランクB"
WHEN 40 <= TestScore THEN "ランクC"
WHEN 20 <= TestScore THEN "ランクD"
ELSE "ランクF"
END
AS ランク
FROM TEST.Student
WHERE gender = "男";
○実行結果
上記のSQL文では、まずWHERE句によってgenderが『男』のデータのみ絞り込んでいます。
その後に、CASE式によって5つの条件分岐を作っています。
CASEとLIKEを組み合わせる
CASE式とLIKEの組み合わせも紹介しましょう。
○コード例
SELECT
name,TestScore,
CASE
WHEN name LIKE "%藤%" THEN "「藤」あり"
ELSE "「藤」なし"
END
AS 名前の文字列
FROM TEST.Student;
○実行結果
上記のSQL文ではnameに『藤』かどうかで条件分岐しています。
WHENによって、nameに『藤』が入っている場合のみ『「藤」あり』と表示しています。
それ以外は『「藤」なし』と表示しています。
まとめ
本記事では、CASE式ついて解説しました。
CASE式を使って条件によって表示内容を変更する方法が、お分かり頂けたかと思います。
他のプログラミングだと条件分岐にはif文が使われますが、SQLだとCASE式が使われるので、覚えておきましょう。
次回は、SUBSTRなどの文字列操作関数を解説していきます。