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

MySQL 中 IFNULL 與 NULLIF 函數用法詳解與差異比較

     編輯:MySQL 綜合教學

在 MySQL 資料庫開發中,IFNULL 和 NULLIF 是兩個常被混淆的流程控制函數。雖然名稱相似,但它們的功能與應用場景截然不同。本文將透過語法說明與實際範例,幫助您徹底掌握這兩個函數的用法與差異。

IFNULL 函數:處理 NULL 值的預設替代方案

語法: IFNULL(expr1, expr2)

運作邏輯: 若 expr1 不為 NULL,則回傳 expr1;否則回傳 expr2。回傳值的型別(數值或字串)取決於使用的語境。

實際範例

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

型別推論規則: IFNULL 的預設結果型別為兩個運算式中較「通用」的一個,優先順序為 STRING、REAL、INTEGER。例如建立表格時:

CREATE TABLE tmp SELECT IFNULL(1, 'test') AS test;

此例中,test 欄位的型別會是 CHAR(4)。

NULLIF 函數:相等時回傳 NULL 的條件判斷

語法: NULLIF(expr1, expr2)

運作邏輯: 若 expr1 = expr2 成立,則回傳 NULL;否則回傳 expr1。這等同於 CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END。

實際範例

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

效能提示: 當參數不相等時,MySQL 會對 expr1 求值兩次,在複雜運算式中需注意效能影響。

核心差異快速比較

函數核心用途回傳 NULL 的條件典型應用場景
IFNULLNULL 值替換/預設值第一個參數為 NULL 時回傳第二個參數(非 NULL)資料顯示預設值、避免 NULL 參與運算導致錯誤
NULLIF特定值轉為 NULL兩個參數相等時防止除零錯誤(如 NULLIF(divisor, 0))、資料清洗

實務應用建議

  • IFNULL:常用於報表查詢中,將 NULL 欄位顯示為「無資料」、「0」或其他預設文字。
  • NULLIF:在數學運算前預處理除數,例如 SELECT 100 / NULLIF(count, 0) 可避免除零錯誤並回傳 NULL 而非報錯。

掌握這兩個函數的差異,能讓您的 SQL 查詢更健壯、更符合業務邏輯需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved