データの検索(条件分岐での検索)
単純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です。
1 2 3 4 5 6 7 8 |
SELECT name, CASE team_cd WHEN 'D' THEN 'ドッグス' WHEN 'T' THEN 'タートルズ' ELSE 'その他' END AS チーム名 FROM central; |
上記を実行し、抽出された結果がこちらです。
name | チーム名 |
---|---|
荒木 太郎 | ドッグス |
金本 三郎 | タートルズ |
青木 一郎 | その他 |
井端 次郎 | ドッグス |
新井 四郎 | その他 |
team_cd列の値に応じてチーム名を編集し、抽出されています。
この場合、「team_cd列の値が”D”の場合は”ドッグス”、”T”の場合は”タートルズ”、それ以外の場合は”その他”と表示してね」という意味になります。
検索CASE式での検索
検索CASE式では、条件に条件式を指定できるため、多くの検索パターンに対応でき非常に便利です。
単純CASE式では条件が必ず一致(イコール)となりますが、検索CASE式では不等号はもちろん、IN句や副問い合わせまで使用できます。
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です。
1 2 3 4 5 6 7 8 |
SELECT name, CASE WHEN team_cd IN ('D', 'T', 'C') THEN '西' WHEN team_cd = 'S' THEN '東' ELSE NULL END AS 所在地 FROM central; |
上記を実行し、抽出された結果がこちらです。
name | 所在地 |
---|---|
荒木 太郎 | 西 |
金本 三郎 | 西 |
青木 一郎 | 東 |
井端 次郎 | 西 |
新井 四郎 | 西 |
team_cd列の値に応じて所在地を編集し、抽出されています。
この場合、「team_cd列の値が”D”または”T”または”C”の場合は”西”、”S”の場合は”東”、それ以外の場合はNULLを表示してね」という意味になります。
なお、WHENの条件のいずれにも該当しなかった場合、自動的にNULLとなりますが、誰が見てもわかるようにELSEへ明示するようにしましょう。
以上が、条件分岐での検索を行うことができる「CASE」の使い方です。
これは理解すると非常に便利で、SQL記述がスッキリする等のメリットも多いので、ぜひ参考にしてみてください。