NULL 代表「未知」或「不存在」,與空字串 ''、數值 0 截然不同。誤解 NULL 行為是 SQL 新手最常見的 Bug 來源。
| 操作 | NULL | 空字串 '' |
|---|---|---|
| 含義 | 電話號碼未知 | 確定沒有電話 |
| 插入語法 | INSERT ... VALUES (NULL) | INSERT ... VALUES ('') |
= NULL 比較 | 永遠為 FALSE | 可比較 |
| 正確判斷 | IS NULL / IS NOT NULL | = '' / != '' |
COUNT(col) | 不計入 | 計入 |
COUNT(*) | 計入列數 | 計入列數 |
排序 ORDER BY | 預設最前(ASC)/ 最後(DESC) | 正常排序 |
DISTINCT/GROUP BY | 視為相同值群組 | 正常群組 |
SELECT * FROM users WHERE phone = NULL; -- 永遠回傳 0 筆
SELECT * FROM users WHERE phone IS NULL; -- 找未填電話
SELECT * FROM users WHERE phone = ''; -- 找明確填空字串
SELECT * FROM users WHERE phone IS NOT NULL; -- 找已填電話
SELECT 1 + NULL; -- NULL
SELECT CONCAT('A', NULL); -- NULL
SELECT NULL = NULL; -- NULL (非 TRUE)
使用 IFNULL()、COALESCE()、NULLIF() 處理:
SELECT IFNULL(phone, '未提供'); -- NULL 時顯示預設值
SELECT COALESCE(mobile, phone, '無'); -- 取第一個非 NULL
SELECT NULLIF(col, ''); -- 空字串轉 NULL
NOT NULL'';需寫 \N (大寫 N) 才存入 NULLSUM/AVG/MIN/MAX 忽略 NULL;COUNT(col) 忽略 NULL;COUNT(*) 計算列數