【SQL】CASEを使用して条件分岐する方法をわかりやすく解説

【SQL】CASEを使用して条件分岐する方法をわかりやすく解説

Rii

Rii

ボールド歴8年

SQLを使用してデータを抽出するとき、特定のカラムの値に応じて条件分岐処理をすることができます。

例)新たなカラム「judge」を作って「score」の値に応じて以下のような判定をしたい。

scorejudge
100合格(満点)
50点以上合格
49点以下補習
NULL未判定

このような場合「CASE」式を使って実現することができます。それでは「CASE」の使用方法をわかりやすく解説していきます。※コードのみ参照したい方は「3-2 検索CASE式のサンプルコード」をご覧ください。

One dayインターン

1.CASE式とは 〜使いどころ〜

簡単にいえば条件分岐ができます。CASE式は構文を覚えれば簡単に記述でき、様々な応用が可能です。SELECT文、UPDATE文など様々なSQLクエリの中で利用可能です。


2.CASE式の構文

CASE式には「単純CASE式」と「検索CASE式」があり、記述方法が少し異なります。構文は以下のとおりです。具体例については次章で解説します。

###–###–###   単純CASE式の構文   ###–###–###

指定したカラムの値(条件)に基づき、結果を返します。<条件A が 結果A だったら・・>というように検索条件はイコールのみで評価します。

CASE [検索対象のカラム名]
WHEN [条件A] THEN [結果A]
WHEN [条件B] THEN [結果B]
ELSE [結果C(条件A・条件Bに該当しない時)]
END

###–###–###   検索CASE式の構文   ###–###–###

検索CASE式では条件式を記述することができます。イコール以外にも不等号やNULL値の評価なども可能で、単純CASE式より複雑な条件分岐ができます。

CASE 
WHEN [検索対象カラム名] = [検索条件A] THEN [結果A]
WHEN [検索対象カラム名] = [検索条件B] THEN [結果B]
ELSE [結果C(条件A・条件Bに該当しない時)]
END

3.具体的な使用方法とサンプルコード

では実際に単純ケース式と検索ケース式のサンプルコードを見ていきましょう。

3-1.単純CASE式と検索CASE

検索対象のカラムが検索条件と「イコール」であるかを判定するケースでは単純ケース式が利用できます。以下のテーブルを使ってコードを記述してみましょう。

++ サンプルテーブル ++ table名:flower
+——————–+——–+———-+——-+
| name               | color  | quantity | price |
+——————–+——–+———-+——-+
| チューリップ       | Red    |       50 |   250 |
| バラ               | White  |       26 |   400 |
| ユリ               | White  |       22 |   350 |
| ひまわり           | yellow |       10 |   300 |
+——————–+——–+———-+——-+

次のような条件でSQL文を記述してみます。

カラム「color」の値が「Red」なら「赤」を返す
カラム「color」の値が「White」なら「白」を返す
カラム「color」の値が それ以外 なら「その他」を返す

◆単純CASE式の場合
    CASE color
        WHEN 'red' THEN '赤'
        WHEN 'white' THEN '白'
        ELSE 'その他' 
    END as 色

◆検索CASE式の場合
    CASE
        WHEN color = 'red' THEN '赤'
        WHEN color = 'white' THEN '白'
        ELSE 'その他' 
    END as 色

++ 実行結果 ++
+——————–+——–+———-+——-+———–+
| name | color | quantity | price | 色 |
+——————–+——–+———-+——-+———–+
| チューリップ | Red | 50 | 250 | 赤 |
| バラ | White | 26 | 400 | 白 |
| ユリ | White | 22 | 350 | 白 |
| ひまわり | yellow | 10 | 300 | その他 |
+——————–+——–+———-+——-+———–+

上記2つのクエリは同じ意味、同じ結果となります。

3-2.検索CASE式のサンプルコード

検索CASE式の書き方をもう少し見ていきます。サンプルテーブル「seiseki」を利用して次のような判定をするクエリを記述します。

例)新たなカラム「judge」を作って「score」の値に応じて以下のような判定をしたい。

scorejudge
100合格(満点)
50点以上合格
49点以下補習
NULL未判定

++ サンプルテーブル ++ table名:seiseki
+—-+—————–+——-+——–+
| ID | name | score | bikou |
+—-+—————–+——-+——–+
| 1 | 春田さくら | 100 | NULL |
| 2 | 夏木海斗 | NULL | 欠席 |
| 3 | 秋山りんご | 85 | NULL |
| 4 | 冬下雪彦 | 18 | NULL |
| 5 | 梅雨川あめ | 96 | NULL |
+—-+—————–+——-+——–+

イコールのみでは条件判定ができないため検索CASE式を使います。

SELECT
    ID
    ,name
    ,score
    ,CASE 
        WHEN score = 100 THEN '合格(満点)'
        WHEN score >= 50 THEN '合格'
        WHEN score > 0 THEN '補習'
        ELSE '未判定'
    END as judge
FROM seiseki

++ 実行結果 ++
+—-+—————–+——-+——————–+
| ID | name | score | judge |
+—-+—————–+——-+——————–+
| 1 | 春田さくら | 100 | 合格(満点) |
| 2 | 夏木海斗 | NULL | 未判定 |
| 3 | 秋山りんご | 85 | 合格 |
| 4 | 冬下雪彦 | 18 | 補習 |
| 5 | 梅雨川あめ | 96 | 合格 |
| 6 | 青木春子 | 50 | 合格 |
| 7 | 渡辺なつ | 49 | 補習 |
| 8 | 田中秋生 | 99 | 合格 |
+—-+—————–+——-+——————–+


4.IF文との使い分けについて

IF文(SQLServerでは「IIF」)では、条件をネスト(入れ子に)すると可読性が低下しますが、単純な分岐であればIF文の方が読みやすい場合もあります。一方CASE文はSELECTUPDATEDELETESETINWHEREなど様々な句で使用できます。一概にどちらが良いということではありませんので状況に応じて使い分けてください。


5.CASE式使用時の注意点

CASE式を使う際は、以下の点を頭に入れておくとよいでしょう。

  • WHEN句は「真」になる条件が見つかったら以降のWHEN句は評価されない
  • 条件は排他的に記述する
  • ELSE」は省略可能だが、予期しない結果となること防ぐため記述した方が良い
  • データに「NULL」値を含む場合、想定しない結果となる可能性がある。
  • IS NULL」等を利用して正しく評価されるように留意する。

6.まとめ

CASE式の使い方について初心者向けに解説しました。慣れればとても応用が効きますので、様々な条件で試してみていただければと思います。最後までお読みいただき、ありがとうございました。

【動作検証DB

mySQL 8.0.39

 

【参考サイト】

https://learn.microsoft.com/ja-jp/sql/t-sql/language-elements/case-transact-sql?view=sql-server-ver16

https://learn.microsoft.com/ja-jp/sql/t-sql/functions/logical-functions-iif-transact-sql?view=sql-server-ver16

https://dev.mysql.com/doc/refman/8.0/ja/case.html

https://dev.mysql.com/doc/refman/8.0/ja/if.html

私たちは、全てのエンジニアに市場価値を高め自身の望む理想のキャリアを歩んでいただきたいと考えています。もし、今あなたが転職を検討しているのであればこちらの記事をご一読ください。理想のキャリアを実現するためのヒントが見つかるはずです。

『技術力』と『人間力』を高め定年まで働けるエンジニアを目指しませんか?

私たちは「技術力」だけでなく「人間力」の向上をもって、エンジニアとしてだけでなくビジネスパーソンとして高い水準を目指し、社会や顧客に必要とされることで、関わる人々に感動を与える集団であろうと思っています。

  • 定年までIT業界で働くためのスキルが身につく「感動大学」と「技術勉強会」!
  • 「給与が上がらない」を解消する6ヶ月に1度の明確な「人事評価制度」!
  • 理想のエンジニア像に近づくためのよきアドバイザー「専任コーチ制度」!
  • 稼動確認の徹底により実現できる平均残業時間17時間の働きやすい環境!

現在、株式会社ボールドでは「キャリア採用」のエントリーを受付中です。

まずは以下のボタンより弊社の紹介をご覧いただき、あなたの望むキャリアビジョンをエントリーフォームより詳しくお聞かせください。

コメント

26卒 新卒学生向け主催企業:株式会社ボールド
どんなIT企業なら理想のエンジニアになれるのか?

2時間でIT業界の全てが分かるOne dayインターン

26卒 新卒学生向け主催企業:株式会社ボールド
どんなIT企業なら理想のエンジニアになれるのか?

2時間でIT業界の全てが分かるOne dayインターン