SQLのCASE
文は、条件に基づいて異なる値を返すための強力なツールです。CASE
文を使用すると、SELECT、UPDATE、DELETEなどのSQL文で柔軟に条件分岐を行うことができます。この文は、あるカラムの値に応じて異なる結果を生成したり、データの変換を行ったりするのに非常に有効です。本記事では、SQLのCASE
文の使用方法について、基本的な使い方から応用的な使い方まで、完全かつ包括的に解説します。
1. SQLのCASE
文の基本
CASE
文は、SQLクエリの中で条件に基づいて異なる処理を実行するために使用します。基本的には、次のように構成されます。

基本構文
sqlCASE
WHEN 条件1 THEN 結果1
WHEN 条件2 THEN 結果2
ELSE デフォルトの結果
END
-
WHEN
は条件式を指定し、その条件が真であればTHEN
に続く結果が返されます。 -
ELSE
はすべてのWHEN
条件が偽の場合に返されるデフォルトの結果です。ELSE
は省略可能です。
例:単純なCASE
文の使用
以下のクエリは、顧客の購買金額に基づいて「ステータス」を表示します。
sqlSELECT 顧客ID,
購入金額,
CASE
WHEN 購入金額 > 10000 THEN 'ゴールド'
WHEN 購入金額 > 5000 THEN 'シルバー'
ELSE 'ブロンズ'
END AS 会員ステータス
FROM 顧客;
このクエリでは、顧客の購入金額
に基づいて「ゴールド」「シルバー」「ブロンズ」のいずれかのステータスが割り当てられます。
2. CASE
文の応用
2.1 複数の条件式を扱う
CASE
文は、単一の条件だけでなく、複数の条件を組み合わせて使用することもできます。複雑なロジックが必要な場合でも、CASE
文を活用すれば効率よく条件分岐を実現できます。
例:複数の条件を使用
sqlSELECT 顧客ID,
購入金額,
CASE
WHEN 購入金額 > 10000 AND 購入回数 > 5 THEN 'ゴールド'
WHEN 購入金額 > 5000 AND 購入回数 > 3 THEN 'シルバー'
ELSE 'ブロンズ'
END AS 会員ステータス
FROM 顧客;
このクエリでは、購入金額
と購入回数
の両方を考慮して会員ステータスを決定します。
2.2 CASE
文のネスト
CASE
文は他のCASE
文を内包することも可能です。これにより、さらに複雑な条件分岐が実現できます。
例:CASE
文のネスト
sqlSELECT 顧客ID,
購入金額,
CASE
WHEN 購入金額 > 10000 THEN
CASE
WHEN 購入回数 > 10 THEN 'プラチナ'
ELSE 'ゴールド'
END
WHEN 購入金額 > 5000 THEN 'シルバー'
ELSE 'ブロンズ'
END AS 会員ステータス
FROM 顧客;
この例では、購入金額
が10000円を超える場合、さらに購入回数
に基づいて「プラチナ」または「ゴールド」を選択します。購入金額が5000円を超える場合は「シルバー」、それ以外は「ブロンズ」です。
3. CASE
文の利用シーン
CASE
文は多くの場面で活用できます。以下はその一部の例です。
3.1 データの集計におけるCASE
集計クエリでもCASE
文を使うことで、条件に応じた集計が可能になります。
例:売上金額に基づく集計
sqlSELECT 商品ID,
SUM(CASE WHEN 購入金額 > 5000 THEN 購入金額 ELSE 0 END) AS 高額購入金額
FROM 売上
GROUP BY 商品ID;
このクエリでは、購入金額
が5000円以上のもののみを集計し、高額購入金額の合計を算出します。
3.2 UPDATE
文でのCASE
UPDATE
文でもCASE
文を使用することで、条件に応じたデータの更新が可能です。
例:顧客の会員ステータスを更新する
sqlUPDATE 顧客
SET 会員ステータス =
CASE
WHEN 購入金額 > 10000 THEN 'ゴールド'
WHEN 購入金額 > 5000 THEN 'シルバー'
ELSE 'ブロンズ'
END;
このクエリは、顧客ごとに購入金額
に応じて会員ステータス
を更新します。
3.3 DELETE
文でのCASE
DELETE
文でCASE
文を使うことで、特定の条件に基づいた削除を行うことができます。
例:条件に基づいたデータの削除
sqlDELETE FROM 顧客
WHERE 会員ステータス =
CASE
WHEN 購入回数 < 3 THEN 'ブロンズ'
ELSE 'シルバー'
END;
このクエリでは、購入回数
が3回未満の顧客を削除します。
4. CASE
文を使う際の注意点
CASE
文を使う際にはいくつかの注意点があります。
4.1 デフォルトのELSE
句の重要性
CASE
文を使用する際、ELSE
句は必ずしも必要ではありませんが、条件に一致しない場合の結果を明示するためには非常に重要です。ELSE
句を省略すると、すべてのWHEN
条件が偽の場合、NULL
が返されます。
4.2 複雑なCASE
文のパフォーマンス
CASE
文が複雑になると、クエリのパフォーマンスに影響を与える可能性があります。特に、大量のデータを処理する場合は、CASE
文を使う前にインデックスやデータベース設計の最適化を検討することが重要です。
4.3 データ型の一致
CASE
文の各THEN
句で返すデータ型は一致している必要があります。異なるデータ型を返すと、エラーが発生します。例えば、数値と文字列を混在させることはできません。
5. まとめ
SQLのCASE
文は、条件に基づいて動的にデータを処理したり、変換したりするための非常に強力なツールです。基本的な使用方法から複雑な条件分岐まで、様々なシーンで活用することができます。特に集計、更新、削除などのSQL文で非常に有効です。CASE
文を使う際は、データ型の一致やパフォーマンスに注意しながら活用することが重要です。
CASE
文を理解し、適切に活用することで、SQLクエリをより柔軟かつ強力にすることができます。