在 MySQL 中,CASE 語句是一種非常靈活的條件式運算子,可用於在 SELECT 查詢中實現條件邏輯。CASE 可以在資料選取時提供類似於「如果這樣,則那樣」的邏輯判斷,來根據某些條件改變顯示的結果。CASE 語句可以用在 SELECT 列表、WHERE 子句、ORDER BY 子句中,以及其他可以進行運算的地方。
CASE 語句有兩種基本形式:簡單 CASE 和搜尋 CASE。
簡單 CASE :
CASE 表達式
WHEN 值1 THEN 結果1
WHEN 值2 THEN 結果2
...
ELSE 預設結果
END
以上的語法,CASE 會將表達式的結果與每個 WHEN 子句中的值進行比較,如果相等,則返回對應的 THEN 中的結果。
假設有一個名為 orders 的資料表,其中包含訂單的狀態代碼,每個代碼都代表不同的訂單狀態。下表列出了可能的狀態代碼及其意義:
1 : 已下訂
2 : 運送中
3 : 已送達
4 : 已取消
如果想在查詢結果中將這些狀態代碼轉換為更具可讀性的狀態描述,可以使用簡單的 CASE 語句來實現:
SELECT order_id,
CASE status
WHEN 1 THEN '已下訂'
WHEN 2 THEN '運送中'
WHEN 3 THEN '已送達'
WHEN 4 THEN '已取消'
ELSE '未知狀態'
END AS 訂單狀態
FROM orders;
在以上這個例子中,CASE 語句檢查 status 欄位的值,並根據該值返回對應的狀態描述。如果 status 的值不是 1、2、3 或 4 中的任何一個,CASE 語句將返回 '未知狀態' 作為預設情況。每個訂單的 order_id 和計算後的訂單狀態,將會在查詢結果中顯示,這樣查詢結果就更容易理解和閱讀了。
搜尋 CASE :
CASE
WHEN 條件1 THEN 結果1
WHEN 條件2 THEN 結果2
...
ELSE 預設結果
END
以上的語法,在搜尋 CASE 形式中,每個 WHEN 子句包含一個布林條件,當條件為真時,返回對應的 THEN 中的結果。
搜尋 CASE 語句在 MySQL 中用於基於一組較複雜的條件來變更查詢結果的輸出,而不僅僅是基於單一欄位的值。
這裡提供一個使用搜尋 CASE 語句的範例:
假設有一個名為 employees 的資料表,包含員工的姓名(name)、部門(department)和月薪(salary)。我們想要根據員工的部門和薪資來給予他們不同的評級。
範例查詢如下:
SELECT name, department, salary,
CASE
WHEN department = 'IT' AND salary >= 8000 THEN 'A級'
WHEN department = 'IT' AND salary < 8000 THEN 'B級'
WHEN department = 'HR' AND salary >= 6000 THEN 'A級'
WHEN department = 'HR' AND salary < 6000 THEN 'B級'
ELSE '未評級'
END AS 評級
FROM employees;
與 WHERE 子句一起使用
CASE
WHEN salary > 10000 THEN '高級'
WHEN salary > 5000 THEN '中級'
ELSE '初級'
END AS 評級
FROM employees
WHERE department = 'IT';
0 留言