MySQL の CASE 演算子

ここでは MySQL の CASE 演算子についてご説明します。

サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。

MySQL の CASE 演算子の使い方

MySQL の CASE 演算子は SELECT 文などで使い、条件を上から順番にチェックしていき、最初に合致した条件に指定した結果を返すことができます。

CASE 文の書き方には 2 通りあります。

ひとつめは CASE の直後に比較元の値を指定する構文です。

SELECT 	CASE value 
			WHEN compare_value1 THEN result1
            WHEN compare_value2 THEN result2
			WHEN compare_value3 THEN result3
            ELSE result4
		END
FROM 	table

WHEN は複数指定でき、二個目以降の WHEN と ELSE は必須ではありません。

value = compare_value1 の時は result1、 value = compare_value2 の時は result2 を、、、と上から順番に値を比較していき、合致した値の result を返します。

どの値も合致せず、ELSE が指定されている場合は ELSE の結果を返します。

どの値も合致せず、ELSE が指定されていない場合は NULL を返します。


もうひとつの構文は CASE の直後には何も指定せず、 WHEN につづけて条件式を指定する構文です。

SELECT 	CASE 
			WHEN condition1 THEN result1
            WHEN condition2 THEN result2
			WHEN condition3 THEN result3
            ELSE result4
		END
FROM 	table

基本的にはひとつめの構文とほぼ同じで、WHEN は複数指定でき、二個目以降の WHEN と ELSE は必須ではありません。

上から順番に条件式 (condition) を評価していき、最初に True となった条件式に指定した result を返します。

どの条件式も True にならず、ELSE が指定されている場合は ELSE の結果を返します。

どの条件式も True にならず、ELSE が指定されていない場合は NULL を返します。

こちらの構文だけ覚えておけば、ひとつめの構文のケースにも使えます。


MySQL の CASE 演算子を使ってレコードを取得する

それでは、実際に CASE 演算子を使ってデータを取得してみましょう。


まずは CASEの直後に値を指定する、ひとつめの CASE 演算子の構文を使います。

次のような students テーブルがあります。

MySQL の CASE 演算子 1


この students テーブルから、CASE を使って gender が M の時は 「 男性 」、F の時は 「 女性 」、それ以外は 「 不明 」 という値を取得するには次のようにできます。

SELECT 	gender,
		CASE gender
			WHEN 'M' THEN '男性'
            WHEN 'F' THEN '女性'
            ELSE '不明'
		END AS '性別'
FROM 	students;

[実行結果]

MySQL の CASE 演算子 2

gender に合った「 性別 」カラムが取得できています。


次は WHEN に続いて条件文を指定する、ふたつめの CASE 演算子の構文を使います。

次のような exam_results テーブルがあります。

MySQL の CASE 演算子 3


この exam_results テーブルから、CASE を使って score によって、A・B・C・D・F のグレード取得するには次のようにできます。

SELECT 	score,
		CASE
			WHEN score >= 90 THEN 'A'
            WHEN score >= 80 THEN 'B'
            WHEN score >= 70 THEN 'C'
			WHEN score >= 60 THEN 'D'
            ELSE 'F'
		END AS grade
FROM 	exam_results;

[実行結果]

MySQL の CASE 演算子 4

score に合った grade が取得できています。

本来 B グレードは 80 <= score <= 89 ですが、条件文を上から順番に評価していって、True になったところで止まるので、条件文には score >= 80 とだけ指定しています。


以上、MySQL の CASE 演算子についてご説明しました。

© 2024 MySQL 入門