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

MySQL IS NULL 用法詳解:空值判斷、排序與常見誤區

     編輯:MySQL 資料庫相關知識

核心觀念

  • NULL 代表「未知」或「無值」,不等於 0、空字串 '' 或 'NULL' 字串。
  • 任何與 NULL 的比較 (=, !=, <, >) 結果皆為 NULL (即 false)。
  • 只能用 IS NULL / IS NOT NULL 或 <=> (安全等於) 判斷。

基本語法與範例

-- 正確
WHERE col IS NULL;
WHERE col IS NOT NULL;
WHERE col <=> NULL;  -- 安全等於,NULL <=> NULL 為 true

-- 錯誤
WHERE col = NULL;    -- 永遠不會匹配
WHERE col != NULL;   -- 永遠不會匹配

實戰演示

CREATE TABLE topic (
  topicid SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  category VARCHAR(20) NOT NULL
) ENGINE=InnoDB;

INSERT INTO topic (name, category) VALUES
('java', 'rock'), ('css', 'opera'), ('c', 'dance');

-- 查詢 category 為 NULL (此處無資料)
SELECT * FROM topic WHERE category IS NULL;  -- Empty set

-- 查詢 category 不為 NULL
SELECT * FROM topic WHERE category IS NOT NULL;  -- 返回所有 3 筆

NULL 在 GROUP BY / ORDER BY 中的行為

  • GROUP BY:所有 NULL 視為同一群組。
  • ORDER BY ASC:NULL 排在最前。
  • ORDER BY DESC:NULL 排在最後。

常見誤區與避坑

  1. NOT NULL 欄位插入 0/空字串:允許,因為 0 和 '' 是實際值,非 NULL。
  2. COUNT(col) vs COUNT(*):COUNT(col) 忽略 NULL,COUNT(*) 計算所有行。
  3. NOT IN 子查詢含 NULL:若子查詢結果含 NULL,外層 NOT IN 永無結果。改用 NOT EXISTS 或 LEFT JOIN ... IS NULL。
  4. 唯一索引與 NULL:MySQL 允許多筆 NULL 共存於唯一索引欄位 (視為不同值)。

最佳實踐

  • 業務上「無值」語義明確欄位,預設 NULL 而非空字串/0。
  • 應用層統一處理 NULL 顯示邏輯,避免前端出現 null 字串。
  • 關鍵欄位加 NOT NULL 約束,配合 DEFAULT 值減少判斷分支。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved