SQL caseの使い方のサンプル(条件分岐)

SQLのcaseの使い方のサンプルです。

目次

サンプル 条件分岐を行う
  Caseのサンプル
  Caseでlikeを使用する
  Caseでnullを判定する
  update文でCASE式を使用する
  条件の判定値を外出しにしてパラメータ化する

条件分岐を行う

CASE 値1
WHEN 値2 THEN 結果
[ELSE 結果]
END
CASE
WHEN 条件 THEN 結果
[ELSE 結果]
END
  • (上段)値1とWHENでの値2が一致した時、THENの結果を返します。
  • (下段)WHENで条件がtrueの時、THENの結果を返します。
  • ELSEは、値が一致しないまたは条件がtrue出ない時に実行されます。省略可能です。
  • 条件は複数の条件やlikeも使用できます。

Caseのサンプル

以下のテーブルがあるとします。

colorテーブル
id name
1 red
2 blue
3 grey

SQL

上記テーブルに対してcaseで判定します。

select 
	CASE name
		WHEN 'red' THEN '赤'
		WHEN 'blue' THEN '青'
		ELSE 'その他' 
	END as test
from color;

結果は、以下のとおりです。

test
その他

判定をWHENの条件で行った場合以下になります。

select 
	CASE 
		WHEN name = 'red' THEN '赤'
		WHEN name = 'blue' THEN '青'
		ELSE 'その他' 
	END as test
from color;

 

Caseでlikeを使用する

以下のようにCaseでlikeを使用できます。

select 
	CASE 
		WHEN name like 're%' THEN '赤'
		WHEN name like 'bl%' THEN '青'
		ELSE 'その他' 
	END as test
from color;

 

Caseでnullを判定する

以下のようにCaseでnullを判定できます。

select 
	CASE 
		WHEN name IS NOT null THEN 'nullでない'
		WHEN name IS NULL  THEN 'null'
		ELSE 'その他' 
	END as test
from color;

 

update文でCASE式を使用する

update文でCASE式を使用するサンプルです。
1回のSQLで条件分岐の判断をして各行を更新できます。

以下のテーブルがあるとします。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato

SQL

上記テーブルに対してupdateとcase式でデータを更新します。

UPDATE syain
SET 
   name = case id
          when 1 then '鈴木一郎'
          when 2 then '田中二郎'
          when 3 then '佐藤三郎'
          end
  ,romaji = case
          when id > 1 then 'tokumei' 
          ELSE 'i.suzuki'
          end
WHERE id in (1,2,3);

3~7行目は、ひとつめのcase式でname列に対して更新します。
8~11行目は、ふたつめのcase式でromaji列に対して更新します。

結果は、以下のとおりです。

syainテーブル
id name romaji
1 鈴木一郎 i.suzuki
2 田中二郎 tokumei
3 佐藤三郎 tokumei

1回のSQLで条件分岐の判断をして各行を更新しています。

 

条件の判定値を外出しにしてパラメータ化する

条件の判定値を外出しにしてパラメータ化するサンプルです。

以下のテーブルがあるとします。

Seisekiテーブル
id name kamokuID tokuten
1 鈴木 11 75
2 田中 11 95
3 佐藤 11 65
Hanteiテーブル
kamokuID hantei1 hantei2 hantei3
11 90 70 50

SQL

inner joinでテーブルを結合し、判定値をテーブルから取得します。

select 
	s.ID,s.name,s.TOKUTEN,
	CASE 
		WHEN s.TOKUTEN > h.HANTEI1 THEN 'Excellent'
		WHEN s.TOKUTEN > h.HANTEI2 THEN 'Good'
		ELSE 'Average' 
	END as hantei
from SEISEKI s
  inner join HANTEI h
on 
  s.KAMOKUID = h.KAMOKUID

3~7行目は、CASE式です。条件の値を判定しています。
8行目からは、テーブルを結合しています。

結果は、以下のとおりです。

id name tokuten hantei
1 鈴木 75 Good
2 田中 95 Excellent
3 佐藤 65 Average

条件の値をテーブルとして外出しにしています。
そのため、条件の値を変更したい場合は、テーブルの値を変更するだけで良くなります。

関連の記事

SQL in句 複数の値を条件にする
SQL like 前方一致、あいまい検索、エスケープ
SQL order by 並び順を指定する(ソート)
SQL between 範囲で指定する

△上に戻る