SQLのCASE式を使うと、条件によって返す値を分岐させることができる。データベースの種類に依存しない方法で、Oracle、MySQL、PostgreSQLおよびSQLServerで使用できる。
CASE expr
WHEN comp THEN return
[WHEN comp THEN return ...]
[ELSE return]
END
評価する式
比較する値
戻す値
CASE式を使ったSELECT文の例を次に示す。
SELECT
CASE emp.deptno
WHEN 1 THEN 'OK'
WHEN 2 THEN 'OK'
WHEN 3 THEN 'NG'
WHEN 4 THEN 'NG'
ELSE 'UNKNOWN'
END
FROM emp
SQLのCASE式では、複数の条件によって分岐することもできる。
CASE
WHEN cond THEN return
[WHEN cond THEN return ...]
[ELSE return]
END
条件式
戻す値
複数条件によって分岐するCASE式の例を次に示す。
SELECT
CASE
WHEN emp.deptno = 1 OR emp.deptno = 2 THEN 'OK'
WHEN emp.deptno = 3 OR emp.deptno = 4 THEN 'NG'
ELSE 'UNKNOWN'
END
FROM emp
NULLかどうかを判定するには、IS を使う。
SELECT
CASE
WHEN comm IS NULL THEN sal
WHEN comm IS NOT NULL THEN sal + comm
END
FROM emp
CASE式のELSE句を省略すると、「ELSE NULL」と同じ扱いになる。
SQLのCASE式は入れ子にすることができる。階層の深さに制限は無い。
SELECT
CASE col1
WHEN 1 THEN
CASE col2
WHEN 'A' THEN 'OK'
WHEN 'B' THEN 'NG'
END
ELSE 'NG'
END
FROM emp
SELECT文のWHERE句でCASE式を使うこともできる。
SELECT * FROM emp
WHERE
CASE
WHEN comm IS NULL THEN sal
WHEN comm IS NOT NULL THEN sal + comm
END = 0