SQL CASE WHEN の構文と条件分岐の使い方を完全解説

SQLのCASE WHEN文による条件分岐の基本から応用まで、具体的なコード例を交えて解説します。複雑なデータ処理をシンプルに実現できる方法とは?

SQL CASE WHEN文の条件分岐

CASE WHEN文の特徴
📊
柔軟な条件分岐

複数の条件に基づいて異なる結果を返せる汎用的な構文です

🔄
データベース互換性

主要なデータベースで共通して使用できる標準的な機能です

高いパフォーマンス

複雑な条件分岐をシンプルに実現し、処理効率を向上させます

SQL CASE WHEN文の基本構文と動作原理

CASE WHEN文は、SQLにおける条件分岐の基本となる構文です。以下のような基本形式で記述します:


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

 

この構文では、条件を上から順に評価し、最初に真となった条件に対応する結果を返します。例えば:


SELECT 
    商品名,
    CASE
        WHEN 価格 >= 10000 THEN '高額商品'
        WHEN 価格 >= 5000 THEN '中額商品'
        ELSE '低額商品'
    END AS 価格帯
FROM 商品テーブル

SQL CASE WHEN文の実践的な使用例

実務でよく使用される具体的な例を見ていきましょう:


SELECT
    社員名,
    部署,
    CASE
        WHEN 勤続年数 >= 10 AND 評価 = 'A' THEN 給与 * 1.2
        WHEN 勤続年数 >= 5 AND 評価 = 'A' THEN 給与 * 1.1
        ELSE 給与
    END AS 昇給後給与
FROM 社員テーブル

 

このクエリでは、勤続年数と評価に基づいて給与の計算を行っています。

SQL CASE WHEN文のパフォーマンス最適化

CASE WHEN文を効率的に使用するためのポイントをご紹介します:

  1. インデックスの活用
  • 頻繁に検索される条件列にはインデックスを作成
  • 複合インデックスの検討
  1. 条件の順序最適化
  • 最も頻繁に一致する条件を先頭に配置
  • 計算コストの低い条件を優先
  1. NULL値の適切な処理
    
    CASE
        WHEN column IS NULL THEN 'Unknown'
        WHEN column = '' THEN 'Empty'
        ELSE column
    END
    

SQL CASE WHEN文の高度な応用テクニック

より複雑なデータ処理を実現するための応用例をご紹介します:

  1. 集計関数との組み合わせ
    
    SELECT
        部署,
        SUM(CASE
            WHEN 性別 = '男性' THEN 1
            ELSE 0
        END) AS 男性数,
        SUM(CASE
            WHEN 性別 = '女性' THEN 1
            ELSE 0
        END) AS 女性数
    FROM 社員テーブル
    GROUP BY 部署
    
  2. UPDATE文での活用
    
    UPDATE 商品テーブル
    SET 販売状況 = 
        CASE
            WHEN 在庫数 = 0 THEN '品切れ'
            WHEN 在庫数 < 10 THEN '残りわずか'
            ELSE '在庫あり'
        END
    

SQL CASE WHEN文のエラー処理とデバッグ

CASE WHEN文使用時の一般的な問題と解決方法:

  1. データ型の不一致
    
    -- 誤った例
    CASE
        WHEN 数値カラム = '100' THEN '一致'  -- 文字列との比較
        ELSE '不一致'
    END
    -- 正しい例
    CASE
        WHEN 数値カラム = 100 THEN '一致'    -- 数値との比較
        ELSE '不一致'
    END
    
  2. NULL値の処理
    
    -- NULLを考慮した処理
    CASE
        WHEN カラム IS NULL THEN 'データなし'
        WHEN カラム = '値' THEN '一致'
        ELSE '不一致'
    END
    
  3. パフォーマンスモニタリング
    
    -- 実行計画の確認
    EXPLAIN ANALYZE
    SELECT
        CASE
            WHEN カラム > 100 THEN '大'
            ELSE '小'
        END AS 区分
    FROM テーブル