SQL CASE

概要: このチュートリアルでは、SQL CASE式を使用してSQLステートメントにロジックを追加する方法を学習します。

SQL CASE式の概要

SQL CASE式を使用すると、条件のリストを評価し、可能な結果の1つを返すことができます。 CASE式には、単純CASEと検索CASEの2つの形式があります。

CASE式は、有効な式が許可されている句またはステートメントで使用できます。たとえば、CASE式は、SELECTDELETEUPDATEなどのステートメント、またはSELECTORDER BYHAVINGなどの句で使用できます。

単純CASE式

単純CASE式を以下に示します。

CASE expression
WHEN when_expression_1 THEN
	result_1
WHEN when_expression_2 THEN
	result_2
WHEN when_expression_3 THEN
	result_3
...
ELSE
	else_result
ENDCode language: SQL (Structured Query Language) (sql)

CASE式は、等価演算子(=)を使用して、式を一連の式(when_expression_1、when_expression_2、when_expression_3、…)と比較します。大于(>)、小于(<)などの他の比較演算子を使用する場合は、検索CASE式を使用します。

式がWHEN句の対応する式と一致する場合、CASEステートメントはresult_1、result_2、またはresult_3を返します。

式がWHEN句のどの式とも一致しない場合、ELSE句のelse_resultを返します。 ELSE句は省略可能です。

ELSE句を省略し、式がWHEN句のどの式とも一致しない場合、CASE式はNULLを返します。

単純CASE式の例

employeesテーブルを見てみましょう。

employees_table

現在の年が2000年だとします。

次のステートメントを使用して、単純CASE式を使用して従業員の勤続記念日を取得できます。

SELECT 
    first_name,
    last_name,
    hire_date,
    CASE (2000 - YEAR(hire_date))
        WHEN 1 THEN '1 year'
        WHEN 3 THEN '3 years'
        WHEN 5 THEN '5 years'
        WHEN 10 THEN '10 years'
        WHEN 15 THEN '15 years'
        WHEN 20 THEN '20 years'
        WHEN 25 THEN '25 years'
        WHEN 30 THEN '30 years'
    END aniversary
FROM
    employees
ORDER BY first_name;Code language: SQL (Structured Query Language) (sql)

試してみる

SQL CASE simple CASE example

YEAR関数は、従業員が入社した年を返します。従業員の勤続年数は、従業員が入社した年を現在の年(2000年)から引くことで取得します。

従業員の勤続年数は、従業員が入社した年を現在の年(2000年)から引くことで取得します。

次に、結果を1、3、5、10、15、20、25、30と比較します。勤続年数がこれらの数値のいずれかと等しい場合、CASE式は従業員の勤続記念日を返します。

従業員の勤続年数がこれらの数値と一致しない場合、CASE式はNULLを返します。

検索CASE式

検索CASE式を以下に示します。

CASE
WHEN boolean_expression_1 THEN
	result_1
WHEN boolean_expression_2 THEN
	result_2
WHEN boolean_expression_3 THEN
	result_3
ELSE
	else_result
END;Code language: SQL (Structured Query Language) (sql)

データベースシステムは、CASE式で指定された順序で、各WHEN句のブール式を評価します。

各WHEN句のブール式がtrueと評価された場合、検索CASEステートメントは対応するTHEN句の結果を返します。

trueを返すブール式がない場合、CASE式はELSE句のelse_resultを返します。

単純CASE式と同様に、ELSE句は省略可能です。 ELSE句を省略し、trueと評価されるブール式がない場合、CASE式はNULL値を返します。

検索CASE式の例

検索CASE式の例を以下に示します。

SELECT 
    first_name,
    last_name,
    CASE
        WHEN salary < 3000 THEN 'Low'
        WHEN salary >= 3000 AND salary <= 5000 THEN 'Average'
        WHEN salary > 5000 THEN 'High'
    END evaluation
FROM
    employees;Code language: SQL (Structured Query Language) (sql)

試してみる

給与が3000未満の場合、CASE式は「低」を返します。給与が3000から5000の間の場合、「平均」を返します。給与が5000を超える場合、CASE式は「高」を返します。

SQL CASE searched CASE example

このチュートリアルでは、SQLステートメントにIF THEN ELSEロジックを追加できるSQL CASEステートメントを紹介しました。

このチュートリアルは役に立ちましたか?