CodeGym /課程 /SQL SELF /NULL值檢查:IS NULL 和 IS NOT NULL

NULL值檢查:IS NULL 和 IS NOT NULL

SQL SELF
等級 9 , 課堂 1
開放

今天我們繼續來聊聊 NULL —— 資料庫裡的隱形英雄。如果你還以為 NULL 就只是「什麼都沒有」,你說得沒錯,但又不完全對。在這堂課裡,我們會學會怎麼檢查資料裡有沒有 NULL,還有該怎麼處理這種狀況。 準備好來追蹤那些不存在的值了嗎?

我們先從簡單的開始 —— 想像你在管理一個網路商店的資料庫。有一張訂單表,某些訂單沒有填寫評論,其他的則有備註。如果你想找出所有評論是空的訂單,然後用一般的比較 =<>,你會很驚訝... 為什麼?因為 NULL 是個特例啦!

在 SQL 裡,檢查有沒有 NULL 要用 IS NULLIS NOT NULL。這兩個 operator 幫我們搞定 NULL,拿到想要的資料。

IS NULL 檢查值

IS NULL 是用來檢查某個欄位或運算式是不是 NULL

SELECT *
FROM orders
WHERE comment IS NULL;

這個查詢會回傳所有 comment 欄位是 NULL 的資料列。很方便,想找沒有備註的訂單就靠它。

這裡有個 orders 表格範例:

id customer_name total_amount comment
1 Otto Art 1500 "緊急配送"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

查詢:

SELECT id, customer_name
FROM orders
WHERE comment IS NULL;

結果:

id customer_name
2 Maria Chi
4 Anna Song

注意,空字串 '' 的那一列沒被選進來,因為 '' 不是 NULL 喔。

IS NOT NULL 檢查值

IS NOT NULL 則是反過來用,檢查值不是 NULL。比如你想找所有有填評論的訂單:

SELECT *
FROM orders
WHERE comment IS NOT NULL;

這個查詢只會回傳 comment 欄位有資料的列(包含空字串 '')。

範例

orders 表格還是長這樣。

id customer_name total_amount comment
1 Otto Art 1500 "緊急配送"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

來查詢一下:

SELECT id, customer_name, comment
FROM orders
WHERE comment IS NOT NULL;

結果:

id customer_name comment
1 Otto Art "緊急配送"
3 Alex Lin ''

注意,空字串 '' 也會被選進來。SQL 覺得這個值「不是空的」。

什麼時候該用 IS NULLIS NOT NULL

這裡有幾個常見情境:

  1. 資料過濾:你想排除那些缺資料的紀錄。
  2. 錯誤處理:有時 NULL 代表資料輸入有問題,你得把這些列挑出來。
  3. 資料分析:統計缺值的數量,有助於了解資料品質。

實戰應用

來試幾個實用的小練習:

練習 1:找出沒有填生日的學生

假設你有一張 students 表:

id name birth_date
1 Otto Art 2000-05-10
2 Maria Chi NULL
3 Alex Lin 1998-12-30
4 Anna Song NULL

查詢:

SELECT name
FROM students
WHERE birth_date IS NULL;

結果:

name
Maria Chi
Anna Song

這個查詢很適合找出還沒填生日的學生,方便你去補資料。

練習 2:找出有評論的訂單

id customer_name total_amount comment
1 Otto Art 1500 "緊急配送"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

orders 表來說,我們可以找出有填評論的訂單:

SELECT customer_name, comment
FROM orders
WHERE comment IS NOT NULL;

結果:

customer_name comment
Otto Art "緊急配送"
Alex Lin ''

跟一般 operator 的比較

現在我們來試試「錯誤」的查詢方式來檢查 NULL

SELECT *
FROM orders
WHERE comment = NULL;

是不是很意外?這個查詢一筆資料都不會回傳,就算 comment 明明是 NULL。因為 NULL 不能用一般的 operator 來比較。遇到這種情況一定要用 IS NULL 才行。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION