⭐【教學】SQL 查詢為什麼抓不到 NULL?一篇搞懂 is null / is not null 正確用法!
在資料庫查詢時,你可能曾經寫過類似這樣的 SQL:
但神奇的是──
永遠查不到任何資料!
明明資料庫裡就有欄位是空值(NULL),SQL 卻裝作「看不見」。
為什麼會這樣?
這不是你寫錯,而是
SQL 的 NULL 無法用 = 或 != 比較。
這篇文章會用生活化方式解釋這個問題,並帶你快速掌握正確的 NULL 查詢方式。
🍀 什麼是 NULL?為什麼不能比較?
在資料庫中:
-
0是數字 -
''(空字串)是文字只是空 -
NULL則是 未知的值、不存在的值
因此 SQL 沒辦法判斷:
就好像問:
“不知道的東西,不等於 1 嗎?”“不知道的東西,不等於 空字串嗎?”
資料庫會回答:
我不知道,所以我不能說 true,也不能說 false。
所以像這樣的寫法:
永遠都不會成立。
✔ 正確查詢 NULL 的方式(唯一方法)
SQL 有專門針對 NULL 的語法:
✔ 找出為 NULL 的資料
✔ 找出不是 NULL 的資料
這兩個語法才是查詢空值的正確方式。
🧪 實際案例:查詢某欄位不為空
假設你有一張訂單資料表
orders,想找出有填備註(remark)的訂單:
如果 remark 欄位有內容(像是 “請加辣”),就會被查出來。
⚠ 補充:Oracle 中空字串也會變成 NULL
如果你使用 Oracle 資料庫,你可能會注意到:
雖然表面上看起來是空字串,Oracle 會自動把它轉成:
這是 Oracle 的特性,其他資料庫(如 MySQL、SQL Server)不會這樣做。
🎯 常見錯誤案例(你一定遇過)
❌ 錯誤寫法(永遠查不到)
❌ 用引號錯誤(單雙引號混用)
✔ 正確寫法
🔍 小技巧:想檢查某欄位到底有沒有 NULL?
你可以用 count(*) 看看:
或是:
非常適合快速確認資料是否真的有值。
📝 總結
| 問題 | 正解 |
|---|---|
| NULL 可以用 = 比較嗎? | ❌ 不行 |
| NULL 可以用 != 比較嗎? | ❌ 不行 |
| 查 NULL 要用什麼? |
✔ is null
|
| 查非 NULL 用什麼? |
✔ is not null
|
| Oracle 中空字串會變成? | ✔ NULL |
🎉 結語
SQL 的 NULL 是許多人在剛開始接觸資料庫時最容易搞不清楚的一環。
但只要記住這一句:
查 NULL 一律用 IS NULL / IS NOT NULL,其他都不會動。
就能避免大部分查不到資料的問題。
如果你還想學更多 SQL 查詢技巧、資料庫最佳化方法,也可以留言告訴我,我會為你寫更多簡單易懂的教學!
留言
張貼留言