摘要:在本教學中,您將學習如何使用 SQL CASE 運算式將邏輯新增至 SQL 陳述式。
SQL CASE 運算式簡介
SQL CASE 運算式可讓您評估一系列條件,並傳回其中一個可能的結果。CASE 運算式有兩種格式:簡單 CASE 和搜尋 CASE。
您可以在允許有效運算式的子句或陳述式中使用 CASE 運算式。例如,您可以在諸如 SELECT、DELETE 和 UPDATE 等陳述式或諸如 SELECT、ORDER BY 和 HAVING 等子句中使用 CASE 運算式。
簡單 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
END
Code 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 資料表。

假設目前年份為 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)

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 運算式一樣,END 子句是可選的。如果您省略 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 運算式會傳回「Low」。如果薪資介於 3000 到 5000 之間,則會傳回「average」。當薪資大於 5000 時,CASE 運算式會傳回「High」。

在本教學中,我們向您介紹了 SQL CASE 陳述式,可讓您將 IF THEN ELSE 邏輯新增至 SQL 陳述式。