CASE式の種類
以下、2つの種類があります。
- 単純CASE式
- 検索CASE式
検索CASE式
単純CASE式の上位互換です。単純CASE式の機能を全て含んでいます。検索CASE式だけ覚えれば良いでしょう。
検索CASE式の構文
1 2 3 4 |
CASE WHEN 条件1 THEN 結果1 WHEN 条件2 THEN 結果2 ELSE その他の結果 END |
WHEN句で指定する条件とは、戻り値が真理値(TRUE/FALSE/UNKNOWN)が変えるような式を設定します。
戻り値が「TRUE」であれば、THEN句の結果が返ります。
もし、何も条件に該当するものがなかった場合は、ELSEで指定された値が結果として返ります。
ELSE句について
ELSE句(何も条件に一致しなかった場合に処理される結果)は、省略することも可能です。
しかし、その場合は「ELSE NULL」という処理に自動で変換されてしまうので、必ず記述するようにしましょう。
CASE式のメリット
- CASE式は、どのRDBMSにも対応していて非常に汎用性が高い記述方法
- CASE式は、あくまで「式」という扱いなので、式を使える句であればどこにでも記述できる。
CASE式は、どのRDBMSにも対応していて非常に汎用性が高い記述方法
例えば、値によって、結果を分岐させる関数としては、Oracleであれば「DECODE関数」というものがありますが、これはOracleでしか使えず汎用性が低いです。
CASE式であれば、標準SQLのため汎用性は高いです。
他のDBMSの方言は使った方がいいの?
例えば、Oracleであれば、DECODE関数、MySQLであれば、IF関数がCASE式と同じ機能を持つ関数になります。
これらは特定のDBMSでしか動かないですし、CASE式に比べると柔軟性が少しないので、あまり使わない方がよいでしょう。
CASE式は、あくまで「式」という扱いなので、「式」を使える句であればどこにでも書ける。
例えば、集約関数(SUM、MAX等)の中にも記述したりできます。
CASE式は、実行時に評価されて一つの値に定まります。
GROUP BY句と併用すれば、HAVING句を使わなくてもSQLを書けたりします。
他には、例えば下記のように、列名や、定数を書ける場所にはどこにでも記述することができます。
- SELECT句
- WHERE句
- ORDER BY句
非常に自由度が高く便利です。
この記事へのコメントはありません。