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

MySQL IFNULL 函數詳解:空值處理的瑞士軍刀

     編輯:MySQL 綜合教學

MySQL IFNULL 函數詳解:空值處理的瑞士軍刀

語法與邏輯

IFNULL(expr1, expr2)
-- 若 expr1 不為 NULL,返回 expr1;否則返回 expr2。
-- 返回類型:數值或字符串,取決於上下文。

經典場景:左連接查詢時的空值填充

學生表 tbl_student、成績表 tbl_score,查所有學生的英語成績,無成績顯示 0:

SELECT 
    stu.*, 
    IFNULL(score.english_score, 0) AS english_score
FROM tbl_student stu
LEFT JOIN tbl_score score ON stu.stu_id = score.stu_id;

解析:

  • 有成績 → 顯示實際分數。
  • 無成績(score.english_score 為 NULL) → 顯示 0。
  • 配合 LEFT JOIN 保證學生主表全量輸出。

進階用法與對比

函數參數數特點適用場景
IFNULL(a,b)2MySQL 專有,簡潔單列空值替換
COALESCE(a,b,c...)≥2標準 SQL,返回第一個非 NULL多備選值、跨庫遷移
CASE WHEN a IS NULL THEN b ELSE a END—最通用,可加複雜邏輯需判斷非 NULL 條件

性能提示

  • IFNULL 在執行計劃中通常被優化為常數傳遞,開銷極小。
  • 避免在 WHERE 條件中對大量行使用 IFNULL(col, 0) = 0,會導致全表掃描;改用 col IS NULL OR col = 0 利用索引。

總結

IFNULL 是處理「業務意義上的預設值」最直觀的函數,配合 LEFT JOIN、報表查詢、數據清洗,能大幅簡化應用層判空邏輯。

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