SQLでは、条件分岐を行う際にIF文を使うことが一般的です。
しかし、データベースによってはIF文をサポートしていない場合もあります。
そうした場合に使えるのがCASE WHENです。
本記事では、SQLのIF文の代わりにCASE WHENを使ってデータを取得する方法について解説し、サンプルSQLとその実行結果も紹介します。
CASE WHENの基本構文
まずはCASE WHENの基本的な構文を確認しましょう。
CASE WHENはSQLにおける条件分岐の一つで、条件に応じて異なる結果を返すことができます。
基本的な構文
CASE WHENは以下のように記述します。
CASE
WHEN 条件1 THEN 結果1
WHEN 条件2 THEN 結果2
ELSE 結果3
END
上記の構文では、条件1が真の場合は結果1を返し、条件2が真の場合は結果2を返します。
どの条件も満たされない場合は、ELSE句に指定された結果3を返します。
IF文とCASE WHENの違い
IF文とCASE WHENの違いについて見ていきましょう。
MySQLなどのデータベースではIF文が使えるため、単純な条件分岐の場合にIF文を利用することができます。
しかし、IF文はデータベースによってはサポートされていないことがあります。
そこで、より汎用性の高いCASE WHENを使用することで、SQLの互換性が向上します。
IF文の基本的な構文
まずはIF文の構文を確認します。
SELECT
IF(条件, 真の場合の結果, 偽の場合の結果) AS カラム名
FROM
テーブル名;
上記のSQL文では、条件が真の場合は「真の場合の結果」を返し、偽の場合は「偽の場合の結果」を返します。
SQLServerの場合はIF()はIIF()になります。
CASE WHENで同じ動作を再現する
上記のIF文をCASE WHENで書き換えると、以下のようになります。
SELECT
CASE
WHEN 条件 THEN 真の場合の結果
ELSE 偽の場合の結果
END AS カラム名
FROM
テーブル名;
このように、IF文をCASE WHENに書き換えることで、条件に応じた異なる結果を返すことができます。
実際のデータを使ったサンプルSQL
ここでは、具体的なデータを使ったサンプルSQLを紹介します。
例えば、従業員の給与テーブルを例に、CASE WHENを使って給与に応じて異なる評価を返すSQLを実行してみましょう。
サンプルデータ
以下のような従業員のテーブルがあるとします。
CREATE TABLE employees (
id INT,
name VARCHAR(100),
salary INT
);
INSERT INTO employees (id, name, salary) VALUES
(1, '田中太郎', 300000),
(2, '鈴木次郎', 500000),
(3, '佐藤花子', 700000);
このテーブルには、従業員ID、名前、給与が格納されています。
CASE WHENを使ったSQLの例
次に、CASE WHENを使って、給与に応じて評価を出力するSQL文を作成します。
SELECT
name,
salary,
CASE
WHEN salary < 400000 THEN '低'
WHEN salary >= 400000 AND salary < 600000 THEN '中'
ELSE '高'
END AS 評価
FROM
employees;
このSQLでは、給与が40万円未満の場合は「低」、40万円以上60万円未満の場合は「中」、それ以外は「高」と評価を表示します。
実行結果
上記のSQLを実行すると、以下のような結果が得られます。
+------------+---------+--------+
| name | salary | 評価 |
+------------+---------+--------+
| 田中太郎 | 300000 | 低 |
| 鈴木次郎 | 500000 | 中 |
| 佐藤花子 | 700000 | 高 |
+------------+---------+--------+
このように、CASE WHENを使うことで、条件に基づいて評価を行うことができます。
複数条件を扱う場合のCASE WHEN
CASE WHENを使うことで、複数の条件を組み合わせることも可能です。
例えば、給与だけでなく勤続年数も考慮した評価を行いたい場合、以下のように記述できます。
複数条件を使ったSQLの例
SELECT
name,
salary,
years_of_service,
CASE
WHEN salary < 400000 AND years_of_service < 5 THEN '低'
WHEN salary >= 400000 AND salary < 600000 AND years_of_service < 10 THEN '中'
ELSE '高'
END AS 評価
FROM
employees;
このように、CASE WHENでは条件を自由に組み合わせることができ、より複雑な評価基準を作成できます
まとめ
本記事では、SQLのIF文の代わりにCASE WHENを使ってデータを取得する方法について解説しました。
CASE WHENは、複数の条件を簡単に扱うことができ、データベース間の互換性を高める上で非常に有用です。
IF文をサポートしていないデータベースでも、CASE WHENを使うことで同様の処理が可能です。
ぜひ、CASE WHENを活用して効率的なSQLクエリを作成してみてください。