第2回 SQL Server Select文で 条件分岐 case文の使用
photo by Jane Dallaway
CASE文の意味合いはVBで言うところの、Select文、CだとSwitch文に似ている感じでを受けます。
CASE文はSQL Server Compactでもサポートされ使用できます。
SQL Server Select文で 条件分岐 case文を使用する際、用法は一つだけではなく、
- 単純CASE 関数 – 1 つの式を一連の単純式と比較して結果を決定します。
- 検索CASE 関数 – 一連の論理式を評価して結果を決定します。
と、2種類ありますが、これでは、いまいちなんのこっちゃピンときませんよね。
単純CASE 関数
CASE input_expression WHEN when_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ] END
引数
input_expression……A
- 単純 CASE 形式を使用した場合に評価される式。input_expression は、比較元の値をいれます。
WHEN when_expression
-
単純 CASE 形式を使用した場合に input_expression と比較される単純式。
when_expression に比較対象の値をいれます。
THEN result_expression
-
input_expression = when_expression が TRUE になった場合、実行される式を入れます。
ここでTRUEとなり実行された場合、次のWHEN句、ELSE句に制御は渡りません。制御は抜けてしまいます。
VBならば、Exitで抜けちゃうって感じでしょうか。
ELSE else_result_expression
-
WHEN句との比較でどれにもあてはまらない時に、実行される部分です 。
ELSE句を省略し、WHEN句との比較でどれにもあてはまらない場合、CASE は NULL を返します。
単純CASE式の流れ
- 実行できるのは、等しいかどうかの真偽チェックだけ。(この点から単純CASEと呼ばれています。)
- WHEN 句の値が、input_expression にに対してTRUEなのかチェック
- TRUE と評価された場合、該当WHEN句 の THEN句以下の式の値を返します。
- ELSE句を設定した場合、WHEN句との比較でどれにもあてはまらない時に、ELSE句以下が実行されます。
ELSE句を省略し、WHEN句との比較でどれにもあてはまらない場合、CASE は NULL を返します。
検索CASE 関数
CASE WHEN Boolean_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ] END
引数
WHEN Boolean_expression
- 検索 CASE 形式で評価するブール式です。
THEN result_expression
-
input_expression = when_expression が TRUE になった場合、実行される式を入れます。
ここでTRUEとなり実行された場合、次のWHEN句、ELSE句に制御は渡りません。制御は抜けてしまいます。
VBならば、Exitで抜けちゃうって感じでしょうか。
ELSE else_result_expression
-
WHEN句との比較でどれにもあてはまらない時に、実行される部分です 。
ELSE句を省略し、WHEN句との比較でどれにもあてはまらない場合、CASE は NULL を返します。
検索CASE式の流れ
- 各 WHEN 句の Boolean_expression を指定の順序で評価。
- TRUE と評価された最初の WHEN句 の THEN句以下の式の値を返します。
- ELSE句を設定した場合、WHEN句との比較でどれにもあてはまらない時に、ELSE句以下が実行されます。
ELSE句を省略し、WHEN句との比較でどれにもあてはまらない場合、CASE は NULL を返します。
使用用途
CASE式の、構文としては、単純、検索の2種類となります。
使用用途として、下記のものがあげられます。
- SELECT ステートメントを単純 CASE 式と共に使用する
- SELECT ステートメントを検索 CASE 式と共に使用する
- Microsoft Access で使用される IIf 関数を CASE で置き換える
- ORDER BY 句で CASE を使用する
- UPDATE ステートメントで CASE を使用する
- SET ステートメントで CASE を使用する
- HAVING 句で CASE を使用する
今回のエントリーは、ここまでです。
次回、使用用途について、エントリーしてみたいと思います。
しかし、このCASE文、使用方法に対する概念や感覚を覚えればけっこう、便利そうですね。
関連リンク
MSDN – SQL Server 2008 オンライン ブック CASE (Transact-SQL)
関連するエントリー
- None Found