
在 SQL 查詢語言中 NULL
被用來表示資料庫中不存在的值,即「沒有數值」或是「未定義值」。根據維基百科上的說法,這是由關聯式資料庫模型的創建者 E.F. Codd 所引入,而在資料庫理論(Database Theory)中,則以 \( \omega \) 來表示空值。
由於 NULL
被表示為「沒有數值」或是「未定義值」,因此在查詢中無法使用比較運算元 =
、>
、<
及 <>
來判斷,比如當使用如下的 SQL 查詢語句試圖撈取資料庫中某一欄為 NULL
的資料列時,會返回空的結果集合:
SELECT name, gender, address
FROM users
WHERE address = NULL;
不論是
NULL = NULL
還是 NULL <> NULL
都會返回 False
值。
那麼該如何在資料庫中判斷一個欄位是否為 NULL
值呢?
實際上關聯式資料庫如 MySQL、Postgres、Microsoft SQL Server 等,都提供了 IS NULL
和 IS NOT NULL
條件判斷式以供判斷欄位是否為 NULL
又或是不為 NULL
:
-- 判斷 address 欄位是否為 NULL
SELECT name, gender, address
FROM users
WHERE address IS NULL;
-- 判斷 address 欄位是否不為 NULL
SELECT name, gender, address
FROM users
WHERE address IS NOT NULL;
值得一提的是
IS NULL
條件式的語意相當於等於條件式,因此能夠有效地使用索引(index)來快速定位與查詢;而IS NOT NULL
條件式的語意相當於不等於條件式,在查詢時資料庫並不會使用索引(index),此時的索引是失效的。
張貼留言