SQL においての IF ともいえる CASE 式 には Oracle 9i より前からある 「単純 CASE 式」 と Oracle 9i 以降に実装された 「検索 CASE 式」 の 2種類がある。また、PL/SQL においても CASE 文 がサポートされている。SELECT のリストに記述できるのはもちろん、LIKE などの条件式と CASE 式 併用して WHERE 句や GROUP BY、HAVING や ORDER BY 句に記述することで場合分けによる異なる式や値による更新、条件付けによる抽出と並び替えなど非常に強力な SQL を記述ができる。
CASE-- ここに expr の表記がなく WHEN に条件
WHEN condition1 THEN return_expr1
WHEN condition2 THEN return_expr2
ELSE retun default_expr
END
他にも condition1 には、IS NULL や IN 、LIKE など記述も可能
検索 CASE 式を使った 家族構成をあらわした例 (CASE 式は短絡評価)
SQL> select
2 age, gender,
3 CASE
4 WHEN age <= 15 THEN 'child'-- 15 歳以下
5 WHEN age < 20 THEN 'young'-- 20 歳未満
6 WHEN gender = 'F' THEN 'lady'-- 以上の条件外で女性
7 WHEN gender = 'M' THEN 'gentleman'-- 以上の条件外で男性
8 ELSE 'ze'-- 不詳
9 END status
10 from
11 family;
AGE GENDER STATUS
---------- ------ ----------
1 F child
13 M child
19 M young
38 F lady
39 M gentleman
<NULL> <NULL> ze