olNGIb4NkK5r2x7x4oG3GpEzizVpnY6KNCck9cym

如何在資料庫中,使用 SQL 語句判斷一個欄位是否為 NULL 值?

在資料庫中 NULL 被用來表示在資料庫中不存在的值,即「沒有數值」或是「未定義值」,此時無法使用比較運算原來判斷,必須使用 IS NULL 或 IS NOT NULL 條件式來判斷一個欄位是否為 NULL 值。

在 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 NULLIS 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),此時的索引是失效的。

張貼留言