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

MySQL SELECT 中使用 IFNULL 為 NULL 列設置默認顯示值的方法

     編輯:MySQL 綜合教學

場景還原

左連接查詢時,右表無匹配導致目標列顯示 NULL,前端直接渲染會出現「null」字樣或報錯,需在 SQL 層統一轉為友好默認值。


原始查詢(無默認值)

SELECT 
  ui.id, ui.user_name, ui.role, ui.adm_regionid,
  r.region_name,
  ui.create_time
FROM userinfo ui
LEFT JOIN region r ON ui.adm_regionid = r.id;

結果示例:

id | user_name | role | adm_regionid | region_name | create_time
---|-----------|------|--------------|-------------|------------
1  | alice     | 1    | 100          | 北京市       | 2023-01-01
2  | bob       | 2    | 999          | NULL        | 2023-01-02

IFNULL 解決方案

SELECT 
  ui.id, ui.user_name, ui.role, ui.adm_regionid,
  IFNULL(r.region_name, '未知區域') AS region_name,
  ui.create_time
FROM userinfo ui
LEFT JOIN region r ON ui.adm_regionid = r.id;

結果:

... | region_name
... | 北京市
... | 未知區域

語法詳解

IFNULL(expr1, expr2)
-- 如果 expr1 不為 NULL,返回 expr1;否則返回 expr2。
-- 等價於:CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
  • **僅兩參數**,MySQL 專有函數。
  • 返回類型按兩參數「高精度」推導(數字>日期>字串)。

進階用法組合

1. 數值列默認 0

SELECT IFNULL(sales_amount, 0) AS sales FROM orders;

2. 字串列默認空串

SELECT IFNULL(nickname, '') AS nick FROM user;

3. 連續兜底:IFNULL + COALESCE

-- 先試 nickname,再試 user_name,最後給 '匿名'
SELECT COALESCE(nickname, user_name, '匿名') AS display_name FROM user;

4. 聚合函數配合

SELECT 
  COUNT(*) AS total,
  COALESCE(SUM(sales), 0) AS total_sales,
  IFNULL(AVG(score), 0) AS avg_score
FROM exam;

性能與類型避坑

避坑點錯誤示範正確做法
隱式類型轉換導致索引失效WHERE IFNULL(varchar_col, 0) = 0WHERE varchar_col IS NULL OR varchar_col = ''
默認值與列類型不匹配IFNULL(datetime_col, 0)IFNULL(datetime_col, '1970-01-01') 或 COALESCE(datetime_col, '1970-01-01')
大量 NULL 列預先轉換增加 CPUSELECT 列表 20+ 個 IFNULL應用層處理或視圖預計算

標準 SQL 替代:COALESCE

-- 多參數,返回首個非 NULL,跨數據庫可移植
SELECT COALESCE(r.region_name, r.region_code, 'N/A') AS region
FROM userinfo ui
LEFT JOIN region r ON ui.adm_regionid = r.id;

總結選型

  • 簡單單一默認值 → IFNULL(代碼最短)。
  • 多級兜底 / 跨庫遷移 → COALESCE(標準 SQL)。
  • 條件複雜(需區分 NULL/空串/0) → CASE WHEN。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved