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のサンプル
以下のテーブルがあるとします。
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で条件分岐の判断をして各行を更新できます。
以下のテーブルがあるとします。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
SQL
上記テーブルに対してupdateとcase式でデータを更新します。
UPDATE employee
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列に対して更新します。
結果は、以下のとおりです。
id | name | romaji |
---|---|---|
1 | 鈴木一郎 | i.suzuki |
2 | 田中二郎 | tokumei |
3 | 佐藤三郎 | tokumei |
1回のSQLで条件分岐の判断をして各行を更新しています。
条件の判定値を外出しにしてパラメータ化する
条件の判定値を外出しにしてパラメータ化するサンプルです。
以下のテーブルがあるとします。
id | name | kamokuID | tokuten |
---|---|---|---|
1 | 鈴木 | 11 | 75 |
2 | 田中 | 11 | 95 |
3 | 佐藤 | 11 | 65 |
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 範囲を指定して検索する