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 |
---|---|
|
|
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 |
---|---|
|
|
|
|
|
|
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 | 人生を楽しむ | (ヌル) |