首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL IFNULL、NULLIF、ISNULL 三大空值處理函式深度解析

     編輯:MySQL 綜合教學

MySQL IFNULL、NULLIF、ISNULL 三大空值處理函式深度解析

在 SQL 查詢中正確處理 NULL 值至關重要。MySQL 提供 ISNULL()、IFNULL()、NULLIF() 三個函式,行為與 SQL Server 不同,本文詳細說明用法與差異。

1. ISNULL(expr) — 判斷是否為 NULL

回傳 1 表示 expr 為 NULL,否則回傳 0。

SELECT ISNULL(1+1);   -- 0
SELECT ISNULL(1/0);   -- 1 (除以零產生 NULL)

補充: ISNULL() 與 IS NULL 判斷邏輯相似,但前者為函式,後者為運算子。

2. IFNULL(expr1, expr2) — 空值替換

若 expr1 不為 NULL,回傳 expr1;否則回傳 expr2。回傳型別取決於上下文(數值或字串)。

SELECT IFNULL(1, 0);        -- 1
SELECT IFNULL(NULL, 10);    -- 10
SELECT IFNULL(1/0, 10);     -- 10
SELECT IFNULL(1/0, 'yes');  -- 'yes'

型別優先順序: STRING > REAL > INTEGER。建立衍生表時,欄位型別會依此規則決定:

CREATE TABLE tmp SELECT IFNULL(1, 'test') AS test; -- test 欄位型別為 CHAR(4)

3. NULLIF(expr1, expr2) — 相等則回傳 NULL

若 expr1 = expr2 成立,回傳 NULL;否則回傳 expr1。等同於 CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END。

SELECT NULLIF(1, 1);  -- NULL
SELECT NULLIF(1, 2);  -- 1

效能提示: 參數不相等時,MySQL 會評估 expr1 兩次。

快速比較表

函式用途回傳值
ISNULL(expr)檢查是否為 NULL1 (是) / 0 (否)
IFNULL(expr1, expr2)NULL 替換預設值expr1 或 expr2
NULLIF(expr1, expr2)相等時轉為 NULLNULL 或 expr1

實務應用場景

  • IFNULL(score, 0):查詢成績單,無成績顯示 0
  • NULLIF(user_input, ''):將空字串轉為 NULL,利於唯一索引判斷
  • ISNULL(deleted_at):軟刪除判斷,未刪除回傳 1
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved