首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL IFNULL、IF、CASE 條件函數區別與實戰用法

     編輯:MySQL 資料庫相關知識

核心問題:NULL 值比較陷阱

SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
-- 結果全為 NULL,而非 true/false

正確判斷:IS NULL / IS NOT NULL。

三大條件函數對比

函數語法用途返回類型
IFNULLIFNULL(expr1, expr2)expr1 非 NULL 返回 expr1,否則 expr2數值/字符串,視上下文
IFIF(expr1, expr2, expr3)expr1 為真(非0/非NULL)返回 expr2,否則 expr3數值/字符串,視上下文
CASE見下文多條件分支、類似 switch各分支類型兼容

實戰案例:查詢非 cancelled 訂單(含 NULL 狀態)

-- 錯誤:NULL 不參與 <> 比較
SELECT * FROM qorder WHERE status <> 'cancel';

-- 正確:IFNULL 將 NULL 轉為默認值再比較
SELECT * FROM qorder WHERE IFNULL(status, 'pending') <> 'cancel';

-- 等價 IF 寫法
SELECT * FROM qorder WHERE IF(status IS NULL, 'pending', status) <> 'cancel';

IFNULL 示例

SELECT IFNULL(1, 0);        -- 1
SELECT IFNULL(0, 10);       -- 0
SELECT IFNULL(1/0, 10);     -- 10.0000 (除零返回 NULL)
SELECT IFNULL(1/0, 'yes');  -- 'yes'

IF 示例

SELECT IF(1>2, 2, 3);              -- 3
SELECT IF(1<2, 'yes', 'no');       -- 'yes'

CASE 兩種語法

簡單 CASE (類似 switch)

CASE value
  WHEN compare_value THEN result
  [WHEN ... THEN ...]
  [ELSE result]
END

SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END;  -- 'one'
SELECT CASE BINARY 'B' WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;        -- NULL (區分大小寫)

搜索 CASE (多條件判斷)

CASE
  WHEN condition THEN result
  [WHEN ... THEN ...]
  [ELSE result]
END

SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;  -- 'true'

實戰常用模式

-- 性別顯示轉換
SELECT id, username,
  CASE gender WHEN 1 THEN '男' WHEN 2 THEN '女' ELSE '未知' END AS gender_name
FROM t_people;

-- 圖書分類展開
SELECT b.id, b.book_name,
  CASE b.type WHEN 1 THEN '計算機' WHEN 2 THEN '會計' ELSE '其他' END AS category
FROM book b;

-- 復雜業務邏輯
SELECT *,
  CASE
    WHEN score >= 90 THEN '優秀'
    WHEN score >= 75 THEN '良好'
    WHEN score >= 60 THEN '及格'
    ELSE '不及格'
  END AS grade
FROM exam;

選型建議

  • 單一 NULL 替換 → IFNULL(最簡潔)
  • 布爾條件二選一 → IF(可讀性好)
  • 多條件分支/區間判斷 → CASE(功能最強)
  • WHERE 子句中優先用 IS NULL/IS NOT NULL,必要時包裹 IFNULL
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved