検索

[Oracle] データ検索 条件分岐SQL(CASE)

データの検索(条件分岐での検索)

単純CASE式での検索

プログラミング言語のIF文と同じように、SQLでもCASEを使用することで条件分岐を行うことが可能です。

まずは単純CASE式と呼ばれる条件分岐からご紹介します。
これはVB.NETで言うところのSELECT CASE文、C#で言うところのSWITCH-CASE文のような使い方をします。

CASE 列1
 WHEN 値1 THEN 結果1
 WHEN 値2 THEN 結果2
 ELSE 結果3
END

それではサンプルを見てみましょう。
以下のようなcentralテーブルがあります。

id name team_cd
1 荒木 太郎 D
2 金本 三郎 T
3 青木 一郎 S
4 井端 次郎 D
5 新井 四郎 C

team_cd列の値に応じて、指定したチーム名を編集して抽出するためのSQLです。

上記を実行し、抽出された結果がこちらです。

name チーム名
荒木 太郎 ドッグス
金本 三郎 タートルズ
青木 一郎 その他
井端 次郎 ドッグス
新井 四郎 その他

team_cd列の値に応じてチーム名を編集し、抽出されています。

この場合、「team_cd列の値が”D”の場合は”ドッグス”、”T”の場合は”タートルズ”、それ以外の場合は”その他”と表示してね」という意味になります。

 

検索CASE式での検索

検索CASE式では、条件に条件式を指定できるため、多くの検索パターンに対応でき非常に便利です。
単純CASE式では条件が必ず一致(イコール)となりますが、検索CASE式では不等号はもちろん、IN句や副問い合わせまで使用できます。

[Oracle] データ検索 複数値検索SQL(IN)データの検索(複数値を一度に検索) 複数値を条件に指定し抽出する 複数の値から一つでも一致したデータを抽出する場合、WHERE句にO...
[Oracle] データ検索 副問い合わせ基本SQLデータの検索(副問い合わせの基本) 単一行副問い合わせ 副問い合わせとは、ある結果を抽出するためのSELECT文の中で、さらにSEL...

CASE
 WHEN 条件式1 THEN 結果1
 WHEN 条件式2 THEN 結果2
 ELSE 結果3
END

それではサンプルを見てみましょう。
以下のようなcentralテーブルがあります。

id name team_cd
1 荒木 太郎 D
2 金本 三郎 T
3 青木 一郎 S
4 井端 次郎 D
5 新井 四郎 C

team_cd列の値に応じて、所在地を編集して抽出するためのSQLです。

上記を実行し、抽出された結果がこちらです。

name 所在地
荒木 太郎 西
金本 三郎 西
青木 一郎
井端 次郎 西
新井 四郎 西

team_cd列の値に応じて所在地を編集し、抽出されています。

この場合、「team_cd列の値が”D”または”T”または”C”の場合は”西”、”S”の場合は”東”、それ以外の場合はNULLを表示してね」という意味になります。

なお、WHENの条件のいずれにも該当しなかった場合、自動的にNULLとなりますが、誰が見てもわかるようにELSEへ明示するようにしましょう。
 
 
以上が、条件分岐での検索を行うことができる「CASE」の使い方です。
これは理解すると非常に便利で、SQL記述がスッキリする等のメリットも多いので、ぜひ参考にしてみてください。