【SQL入門】CASE式の書き方を解説!入れ子、応用例も紹介 

プログラミング

「SQLでSelectするときに、条件によって取得するものを変えたい」
そんなときにはCASE式を使用しましょう。

本記事を読むと条件分岐の基本や、null判定、文字列判定をするSQLコードが書けるようになります。
ぜひご一読ください。

基本的なCASE式の書き方

CASE式は条件に一致する場合の出力をCASE WHEN XXXX THEN ~に、一致しない場合の条件を ELSE ~ の形式で記載します。
下記のような書き方になります。

SELECT CASE WHEN XXXX
THEN [XXXXに該当する場合]
ELSE [XXXXに該当しない場合]
END
FROM テーブル

CASE式 複数条件の書き方

複数条件を指定したいときは、条件の数だけWHENを記載すればOKです。


<サンプルテーブル>
「zaiko」という名称のサンプルテーブルを使い解説します。
テーブル構造と内容は下記の通りです。

ID製品適正在庫数量
1冷蔵庫5060
2テレビ200
3エアコン2010

<SQL文>

<出力>

ID製品在庫状況
1冷蔵庫在庫は十分です
2テレビ在庫切れです
3エアコン在庫が不足しています

CASE式 入れ子構造の書き方

CASE式の中にCASE式を記載する入れ子構造を使うと、複雑な条件分岐を実現できます。
入れ子を使うとSQL文量が少なくなり、メンテナンスがしやすくなり読み易くなるメリットがあります。

各CASE式と対応するELSEやENDを間違えないように注意してください。
(下記サンプルではCASE式と対応するELSE,ENDを色分けしています)

SELECT CASE WHEN XXXX
THEN [XXXXに該当する場合]
ELSE
 CASE WHEN YYYY
THEN [XXXXに該当せずYYYYに該当する場合]
ELSE
[XXXXにもYYYYにも該当しない場合]
 END
END
FROM テーブル

色々なCASE式 応用例

ここまではCASE式の基本的な書き方や入れ子構造について解説しました。
ここからはもう少々実践的に、CASE式の応用例について記載します。

順に簡単な説明とサンプルSQLを記載していきますので、ご自身でも実際に打ち込んで使用してみてください。

条件をAND/ORでつなぐ

CASE式の条件文にANDやORといった論理演算子を使用できます。
ANDの場合は結合された条件をすべて満たす場合、ORの場合はいずれかの条件を満たす場合に条件文を通ります。

SELECT ID, 製品,
CASE WHEN 適正在庫 <> 0 AND 数量 < 適正在庫 THEN ‘在庫の補充が必要’
ELSE ‘在庫は足りています’
FROM zaiko;

CASE式でnull判定

nullかどうかで条件分岐をする場合は、「is null」や「is not null」と書きます。

select ID,
CASE WHEN 製品 is null THEN ‘該当製品なし’,
ELSE 製品
from zaiko;

likeで特定の文字を含むか判定

CASE式とlikeを組み合わせ、特定の文字列を含むかで条件分岐ができます。
「%」はワイルドカードの働きをします。
前方一致、後方一致、部分一致を判定するには「%」を使いましょう。

SELECT CASE WHEN 製品 like ‘テレビ’ THEN …    –「テレビ」と完全一致
WHEN 製品 like ‘冷蔵庫%‘ THEN …         –「冷蔵庫」で始まる場合
WHEN 製品 like’%エアコン’ THEN …         –「エアコン」で終わる場合
WHEN 製品 like’%こたつ%‘ THEN …    –「こたつ」を含む場合
ELSE
END

order byにCASE式を使って出力をソート

order byの中でもCASE式を使用することができます。
select結果をソートしたいけど、テーブルに使いたいソートキーがない場合に有効です。

SELECT * FROM zaiko
ORDER BY
CASE WHEN 製品 = ‘エアコン’ THEN 1
WHEN 製品 = ‘テレビ’ THEN 2
WHEN 製品 = ‘冷蔵庫’ THEN 3
ELSE 0
END;

CASE式は応用幅が広く、SQLエンジニアなら確実におさえておきたい構文です。
ぜひ自分でもいろいろなCASE式を書いて実行し、CASE式を使いこなしてください!

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