2.1 CASE ステートメント

SQL でステートメントを記述する方法は 2 つありますCASE。最初のエントリは Java 言語からの switch のように見えますが、2 番目の形式は plural に似ていますif-else

最初のオプション、つまり switch の類似物から始めましょう。一般的な形式は次のとおりです。

CASE case_value
	WHEN value1 THEN result1
	[WHEN value2 THEN result2] ...
	[ELSE resultN]
END

本当に とよく似ていますがswitch、単語が少し異なるだけです。

SQL ジャワ
ケースX スイッチ (x) {
値がいつ ケースの値:
それから結果 結果を返します。
それ以外の結果 デフォルト: 結果を返します。
終わり }

例を Java から SQL に変換してみましょう。

ジャワ SQL
switch (a) {
   case 1: return "one";
   case 2: return "two";
   case 3: return "three";
   default: return "unknown";
}
CASE a
   WHEN 1 THEN 'one'
   WHEN 2 THEN 'two'
   WHEN 3 THEN 'three'
   ELSE 'unknown'
END

2.2 CASE ステートメントの 2 番目のバージョン

演算子の 2 番目のバージョンもありますCASE。これは、上で述べたように、より複数形に似ていますif-else。一般的な形式は次のとおりです。

CASE
	WHEN condition 1 THEN result1
	[WHEN condition 2 THEN result2] ...
	[ELSE resultN]
END

ここでは、条件が単に順番にチェックされ、いずれかが true の場合、指定された結果が返されます。どの条件にも当てはまらない場合は、 で指定された値が適用されますELSE

例を Java から SQL に変換してみましょう。

ジャワ SQL
if (a == 3)
	return "three";
CASE
   WHEN a=3 THEN 'three'
END
if (a == 3)
	return "three";
else
	return "zero";
CASE
   WHEN a=3 THEN 'three'
   ELSE 'zero'
END
if (a == 1)
	return "three";
else if (a == 2)
	return "two";
else if (a == 3)
	return "three";
else
	return "zero";
CASE
   WHEN a=1 THEN 'one'
   WHEN a=2 THEN 'two'
   WHEN a=3 THEN 'three'
   ELSE 'zero'
END

2.3 CASE ステートメントを使用して問題を解決する

興味深いクエリをいくつか書き留めてみましょう。「期限切れ!」という単語を追加するというタスクがあったことを思い出してください。タスクテーブルの過去のタスク名に。を使えば簡単に行えますCASE

期限フィールドについては、ステートメントの 2 番目のバージョンのようになりますCASE


CASE
	WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name)
	ELSE name
END
        

演算子を使用した完全なクエリの例CASE:


SELECT
    id,
    emploee_id,
    CASE WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name) ELSE name END AS name,
    deadline         	
FROM task
        

このクエリの結果は次のようになります。

ID 従業員ID 名前 締め切り
1 1 期限切れ!フロントエンドのバグを修正 2022-06-01
2 2 バックエンドのバグを修正 2022-06-15
3 5 コーヒーを買う 2022-07-01
4 5 コーヒーを買う 2022-08-01
5 5 コーヒーを買う 2022-09-01
6 (ヌル) オフィスを掃除する (ヌル)
7 4 人生を楽しむ (ヌル)
8 6 人生を楽しむ (ヌル)