IS NULL 判斷空值

在 SQL 中,NULL 代表「沒有值」或「未知」,它與空字串 '' 或數字 0 不同。

為什麼不能用 = 判斷 NULL?

NULL 是特殊值,無法用一般的比較運算子(=<><>)判斷:

-- 錯誤:這不會返回任何結果
SELECT * FROM customers WHERE phone = NULL;

-- 正確:使用 IS NULL
SELECT * FROM customers WHERE phone IS NULL;

IS NULL 語法

查詢欄位值為 NULL 的資料:

SELECT column1, column2, ...
FROM table_name
WHERE column_name IS NULL;

IS NOT NULL 語法

查詢欄位值不為 NULL 的資料:

SELECT column1, column2, ...
FROM table_name
WHERE column_name IS NOT NULL;

範例

假設有一個 customers 資料表:

idnamephone
1張一02-1234
2王二NULL
3李三NULL

查詢沒有電話的客戶:

SELECT * FROM customers WHERE phone IS NULL;

結果:

idnamephone
2王二NULL
3李三NULL

查詢有電話的客戶:

SELECT * FROM customers WHERE phone IS NOT NULL;

結果:

idnamephone
1張一02-1234

NULL 與函數

許多函數遇到 NULL 會返回 NULL:

SELECT 1 + NULL;        -- 結果: NULL
SELECT CONCAT('A', NULL);  -- MySQL 結果: NULL

可以用 COALESCEIFNULL 處理 NULL:

-- 如果 phone 是 NULL,顯示「未填寫」
SELECT name, COALESCE(phone, '未填寫') AS phone
FROM customers;

NULL 與排序

不同資料庫對 NULL 的排序位置不同。可以用 COALESCE 控制:

-- 將 NULL 排在最後
SELECT * FROM customers
ORDER BY COALESCE(phone, 'ZZZZZ');