【SQL初級編9】CASEを使ってSQLで条件分岐を実現しよう

SQL入門

本記事では、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などの文字列操作関数を解説していきます。

挫折率が高い??プログラミング学習のポイント
駆け出しエンジニアが一緒に学ぶ
CANITは、Progateやドットインストールで独学している人達同士をつなげます。駆け出しエンジニアのあなたのためのSNSです。
SQL入門
【この記事を書いた人】
谷津弘樹

某自社開発のIT企業に勤めていた元webプログラマーです。主にサーバーサイド側を担当し、phpを使った開発経験があります。現在は退職しフリーランスライターとして活動中。IT系の記事を主に執筆し生計を立てています。

CANIT
タイトルとURLをコピーしました