このページでは、SQL文での条件分岐方法【CASE式】を解説していきます。
WHERE文で行っている条件分岐をSQLで行ってみましょう( ̄▽ ̄)
1.case式とは
CASE式とは以下のような記載で条件分岐をする方式です。
CASE WHEN 条件1 THEN 値1,
WHEN 条件2 THRN 値2,
ELSE 値3
END
WHEN 条件2 THRN 値2,
ELSE 値3
END
条件1の時に値1を指定、条件2の時に値2を指定、それ以外の時は値3を指定します。
SELECTやUPDATE、DELETEなど様様な面で使用できるのでとても便利です(^^♪
2.select文でcase式を使用しよう
ではまず、select文でCASE式を使用するサンプルを紹介していきます。
以下は大学の定期試験の結果です。
サンプルではこちらを使用して説明していきます。
使用するテーブル
(test_result)
id | 数学(math) | 英語(english) | 物理(physics) | 社会(society) | 氏名(name) | 総合(total) |
1 | 100 | 100 | 100 | 100 | 田中 | 400 |
2 | 79 | 66 | 86 | 65 | 佐々木 | 296 |
3 | 47 | 54 | 34 | 76 | アムロ | 211 |
4 | 45 | 87 | 67 | 78 | 真沙良 | 277 |
5 | 88 | 98 | 100 | 78 | 大野 | 364 |
6 | 12 | 22 | 10 | 7 | 野比 | 51 |
7 | 87 | 34 | 87 | 55 | 立花 | 263 |
8 | 65 | 76 | 67 | 78 | 桜 | 286 |
9 | 100 | 98 | 98 | 31 | 五十嵐 | 327 |
この結果で全教科の合計が300点以上のものを「合格」、
300点未満のものを「不合格」とします。
条件分岐のコードは以下のようになります。
select id, name as 氏名, total as 総合,
case when total >= 300 then '合格'
else '不合格' end as 判定
from test_result;
case when total >= 300 then '合格'
else '不合格' end as 判定
from test_result;
結果
id | 氏名(name) | 総合(total) | 判定 |
1 | 田中 | 400 | 合格 |
2 | 佐々木 | 296 | 不合格 |
3 | アムロ | 211 | 不合格 |
4 | 真沙良 | 277 | 不合格 |
5 | 大野 | 364 | 合格 |
6 | 野比 | 51 | 不合格 |
7 | 立花 | 263 | 不合格 |
8 | 桜 | 286 | 不合格 |
9 | 五十嵐 | 327 | 合格 |
3.update文でcase式を使用しよう
次にupdate文でCASE式を使用していきましょう
先ほどのtest_resultテーブルを引き続き使用していきます。
先ほど不合格となったものに補修と課題がかされ、全員がクリアしたため300点以下の人たちの合計点数を300点に引き上げます。
コードは以下のようになります。
update test_result
set total =
case when total<300 then 300
else total end;
set total =
case when total<300 then 300
else total end;
実行結果をselect 文で見てみましょう
select name as 氏名,total as 総合 from test_result;
氏名(name) | 総合(total) |
田中 | 400 |
佐々木 | 300 |
アムロ | 300 |
真沙良 | 300 |
大野 | 364 |
野比 | 300 |
立花 | 300 |
桜 | 300 |
五十嵐 | 327 |
これで全員が300点以上となりましたね。
以上で終了となります。お疲れさまでした!(^^)!