SQL 入門 > CASE 式

SQL の IF 「CASE 〜 WHEN 式」

SQL においての IF ともいえる CASE 式 には Oracle 9i より以前からある 「単純 CASE 式」 と Oracle 9i 以降に実装された 「検索 CASE 式」 の 2種類がある。また、PL/SQL においても CASE 文 がサポートされている。SELECT のリストに記述できるのはもちろん、LIKE などの条件式と CASE 式 併用して WHERE 句や GROUP BY、HAVING や ORDER BY 句に記述することで場合分けによる異なる式や値による更新、条件付けによる抽出と並び替えなど非常に強力な SQL を記述ができる。

単純 CASE 式 (simple case expression)

CASE に指定した ある式 expr の式の値と 比較対象の式の値 comparison_expr1 をマッチングさせ該当する値をもつ位置の 戻り値 ret_expr1 を戻す式である。 (Oracle 8i 以前でも使用できる)

単純 CASE 式 は DECODE 関数を使用するより見やすく書ける。しかし、2、3個の比較の場合や NULL との比較が1つの構文で短く記述できる DECODE 関数 も根強い人気がある。

ある式の値を元に分岐するもの
単純 CASE 文は、IF の羅列や SELECT をともなう DECODE 関数を使用するより見やすく、さらに高速に動作する。

CASE expr
	WHEN comparison_expr1 THEN return_expr1 
	WHEN comparison_expr2 THEN return_expr2
	ELSE                       return default_expr
END

単純 CASE 式 を 汎用的なプログラム?で表現するなら以下のようなステートメントをもつ関数であらわすことができる。

-- PL/SQL による記述ではない
FUNCTION CASE(expr, comparison_expr1, ret_expr1, .... default_expr)
BEGIN
	IF (expr = comparison_expr1) THEN
		return return_expr1;
	ELSE IF (expr = comparison_expr2) THEN
		return return_expr2;
	END IF;
	return  default_expr;
END FUNCTION
注意

単純 CASE 式 において 比較式 comparison_expr および 戻り値の return_exprdefault_expr に NULL 値 は記述できない。 NULL = NULL の評価は NULL となるため評価されない。参考: CASE 式 と DECODE 関数の違い

検索 CASE 式 (searched case expression)

評価する条件が個々に違うもの ( expr1 = expr2 の形式にならなくても良い )
単純 CASE 式 と比較すると 式 expr の有無と 式 comparison_expr1 なのか 条件文 condition1 なのかで微妙に違っている。 condition1 には expr1 比較演算子 expr2 などの記述ができる。

CASE 
	WHEN condition1 THEN return_expr1 
	WHEN condition2 THEN return_expr2
	ELSE                 retun default_expr
END

他にも condition1 には、IS NULL や IN 、LIKE など記述も可能

PL/SQL の 埋め込みSQL と CASE 式

PL/SQL の 埋め込みSQL に CASE 式が使用できるのは Oracle 9i 以上

これは過渡的なもので Oracle 9i より以前の PL/SQL パーサは SQL パーサと異なっていることによる。 そのために PL/SQL の中に 直接埋め込まれた SQL(埋め込みSQL)において一部の SQL 構文がサポートされていないということがおきている。Oracle 9i 以降はパーサが統合されているため一部の機能が使えないといったことはないと思われる。



SQL 関数 - CASE 関連

 
アルファベット別 関数一覧 ショートカット
ABCDEFG
HILMNOP
RSTUVWX


スポンサード リンク

ITエンジニア キャリアアップ・転職・求人情報

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ OTN Software Kit (開発者ライセンス)
Google