SQLのCASE式
条件分岐ができる
式なので、全体で一つの値を返す
だからSELECT句、WHERE句、HAVING句などどこにでも書ける
(WHERE句ではなく)SELECT句で条件分岐したSQLを書けるようになる
WHENがダメという話ではなく、WHENでの条件分岐がダメ
ダメではないがmrsekut.icon
CASEなしでは複数のSQLで実現していたことが、1つの式で書けたりする
パフォーマンスに有利
CHECK制約を柔軟に掛けられる
WHEN句は短絡評価される
全てのWHEN句の返り値の型は同じである必要がある
ENDを忘れないように注意
ELSE句は書くように気をつける
ELSEはないとELSE NULLとして扱われるので型の狂いによりバグる可能性がある
2種類ある
単純CASE式
見た目がシンプルだが、検索CASE式に比べて出来ることが少ない
単純CASE式で書けることは全て検索CASE式でも書ける
逆は成り立たない
code:SQL
CASE gender
WHEN '1' THEN 'man'
WHEN '2' THEN 'woman'
ELSE 'other' END
hsのcase式っぽいmrsekut.icon
検索CASE式
単純CASE式で書けることは全て検索CASE式でも書ける
逆は成り立たない
こっちで慣れていくようにするかmrsekut.icon
code:SQL
CASE WHEN gender = '1' THEN 'man'
WHEN gender = '2' THEN 'woman'
ELSE 'other' END
hsのguardっぽいmrsekut.icon
SQLのSELECT句に描く時
code:sql
SELECT
CASE
WHEN 条件式1 THEN 式1
WHEN 条件式2 THEN 式2
ELSE 式3
END
FROM テーブル名;
類似
SQLのIF
参考
『達人に学ぶSQL徹底指南書 第2版』 p.2~
いろいろな応用例など
https://qiita.com/sfp_waterwalker/items/acc7f95f6ab5aa5412f3
https://sql-oracle.com/sqlserver/?p=1037