条件分岐をするためにエクセルやプログラムで使われるIF文はSQLではCASE式を使います。条件抽出のWHEREと違うのは、CASE式で作成した条件で新しいカラムを追加できることです。SQLのCASE式(条件分岐)は構文が長くなってしまうデメリットがあるものの処理スピードが速いメリットはあります。
本記事では、SQLで条件分岐するためのCASE式の基本構文からサンプルデータを用いて、実際どのようにしてSQLを書くのかをご紹介致します。
SQLのCASE式がどのようなものかエクセルに例えて解説
SQLのCASE式はエクセルのIF文(条件式)と同じ役割
エクセルの表データから〇〇以上などの条件式をIF文を利用して入力し、新しいセルに値を入れるケースがあります。SQLでも同じような方法をCASE式で実現することができます。例を見てみましょう。
SQL構文例に使うサンプルファイル
下記データを例にコードをご紹介いたします。
■商品情報ファイル1
カテゴリ | 商品名 | 原価 | 個数 | 在庫金額 | 販売開始日 | 販売終了日 |
---|---|---|---|---|---|---|
1 | カビキラー | 1158 | 1 | 1158 | 2025/01/20 | 2025/03/20 |
SQLで条件分岐する時の具体例
上記データから在庫金額に着目し、1,000円以上が高額商品、1,000円未満を低額商品と条件分岐して新しいカラム名(単価レベル)を追加したイメージが下記です。
元データ
商品名 | 在庫金額 |
---|---|
カビキラー | 1158 |
はさみ | 300 |
掃除機 | 5000 |
条件分岐処理後データ
商品名 | 在庫金額 | 単価レベル |
---|---|---|
カビキラー | 1158 | 高額商品 |
はさみ | 300 | 低額商品 |
掃除機 | 5000 | 高額商品 |
=IF(対象セル >1000,”低額商品”,”高額商品” )
エクセルでは新しいカラム名(単価レベル)は別途手入力しますが、SQLの場合は事前に新しいカラム名を指定する所が違います。では、SQLのCASE式を利用したコード例をご紹介します。
SQLのCASE式の構文とポイントをサンプルを用いて解説
SQLのCASE式の書き方(基本)
SQLのCASE式は下記のように書きます。
CASE カラム名
WHEN 条件式1 THEN 条件を満たした結果1
WHEN 条件式2 THEN 条件を満たした結果2
…
ELSE 上記条件にあてはまらない場合の全ての結果
END
CASE式のポイント① SELECT部分にCASE式を記載する
CASE式をSQL文のどこに入れるか?ですがSELECTの部分に記載します。CASE式で書かれた条件は新しいカラム名になるので、SELECTでカラム名を指定するイメージです。(例は下記)
SELECT
カラム名,
CASE カラム名
WHEN 条件1 THEN 結果1
WHEN 条件2 THEN 結果2
…
ELSE 上記条件にあてはまらない場合の全ての結果
END
FROM テーブル名
CASE式のポイント② CASE式ではCASE,WHEN,THEN,ELSE,ENDを全て入れる必要がある
CASE式ではCASE,WHEN,THEN,ELSE,ENDを全て入れないと動作しないお作法があります。漏れがないように記載しましょう。
SQLのCASE式のコード例
上記で解説したエクセル例を参考にSQLのCASEを使った構文例をご紹介します。
CASE 商品名,在庫金額,
WHEN 在庫金額 >1000 THEN ‘低額商品’
ELSE ‘高額商品’
END AS 単価レベル
FROM ‘商品情報ファイル1’
条件式で作成されるカラム名をわかりやすい名前に変換した方がよいのでAS カラム名(単価レベル)として追記しています。
SQLのCASE式のコード例(複数条件例)
複数条件を指定する場合はWHEN~THENを追記していく方法になります。下記例では500円以下をセール品として条件追加した構文にしました。
CASE 商品名,在庫金額,
WHEN 在庫金額 >500 THEN ‘セール品’
WHEN 在庫金額 >1000 THEN ‘低額商品’
ELSE ‘高額商品’
END AS 単価レベル
FROM ‘商品情報ファイル1’
SQLのCASE式で複数条件を記載する場合は記載する順番に注意する
SQLのCASE式は上から順番に処理されます。記載する順番が異なると結果が変わってしまうので注意が必要です。
例えば順番を入れ替えた下記のケース①②を見るとケース①では、最初に500円未満の商品をセール品。その後に1000円未満が低額商品となりますが、ケース②では最初に1000円未満の条件で低額商品と値が入るので、次の500円未満の条件前に値があるので、500円未満の条件であうセール品という値は出てきません。
ケース①
WHEN 在庫金額 >500 THEN ‘セール品’
WHEN 在庫金額 >1000 THEN ‘低額商品’
ケース②
WHEN 在庫金額 >1000 THEN ‘低額商品’
WHEN 在庫金額 >500 THEN ‘セール品’
SQLのCASE式で他に気を付けるポイント
ELSEは省略できるがNULL値となってデータが扱いにいのでELSE推奨
SQLのCASE式でELSEは省略できますが、ELSE部分に当てはまる値が出た場合NULL値になります。NULLはデータを扱ううえで厄介なことが多いですし、第3者とデータを共存することを考えると何かしらの値をELSEで埋めておいた方が安全です。可能な限りELSEを入れて対応しましょう。
ENDの記載漏れでエラーになる場合が多い
SQLのCASE文は最後にENDを記載しないとエラーになってしまいます。エクセルではENDを記載しないので、SQLに慣れていない方がENDを記載し忘れてエラーになるケースが多いです。