快速語法對照
| 特性 | 簡單 CASE | 搜索 CASE |
| 語法 | CASE expr WHEN v1 THEN r1 ... ELSE def END | CASE WHEN cond1 THEN r1 ... ELSE def END |
| 比較方式 | 等值 (=) | 任意布爾表達式 |
| NULL 匹配 | 不匹配 (NULL≠NULL) | 支持 IS NULL |
| 適用場景 | 單列多值映射 | 範圍、多列、複合條件 |
| 可讀性 | 極高 | 高 |
範例:產品類型解碼 (雙形式等價)
-- 簡單 CASE
SELECT product_id,
CASE product_type_id
WHEN 1 THEN 'Book'
WHEN 2 THEN 'Video'
WHEN 3 THEN 'DVD'
WHEN 4 THEN 'CD'
ELSE 'Magazine'
END AS category
FROM products;
-- 搜索 CASE
SELECT product_id,
CASE
WHEN product_type_id = 1 THEN 'Book'
WHEN product_type_id = 2 THEN 'Video'
WHEN product_type_id = 3 THEN 'DVD'
WHEN product_type_id = 4 THEN 'CD'
ELSE 'Magazine'
END AS category
FROM products;
結果集 (12 行)
PRODUCT_ID CATEGORY
---------- --------
1 Book
2 Book
3 Video
4 Video
5 Video
6 Video
7 DVD
8 DVD
9 CD
10 CD
11 CD
12 Magazine
最佳實踐提示
- 優先用簡單 CASE — 解析器優化更好、語義更清晰。
- 需範圍/多列/NULL 判斷 → 搜索 CASE。
- 所有分支返回類型保持一致,避免隱式轉換。
- ELSE 子句建議始終寫上,防止隱式返回 NULL 導致下游邏輯錯誤。