[SQL] 為什麼是 IS NULL 不是 = NULL
在 SQL 裡
SELECT * FROM SOME_TABLE
WHERE SOME_COLUMN = NULL
與
SELECT * FROM SOME_TABLE
WHERE SOME_COLUMN IS NULL
結果是不同的,因為
在 SQL 裡,NULL 代表 unknown
測試:
// 1 = 1 為 true,將 return 值
SELECT * FROM SOME_TABLE
WHERE 1 = 1
// 1 = 0 為 false,不 return 值
SELECT * FROM SOME_TABLE
WHERE 1 = 0
// 1 與 unknown 無法比較,不 return 值
SELECT * FROM SOME_TABLE
WHERE 1 = NULL
接著用 WHERE NOT() 測試 1 = 1、1 = 0、1 = NULL 三組值,會發現 WHERE NOT(1 = 1)、WHERE NOT(1 = 0) 與上面使用 WHERE 結果相反
但 WHERE NOT(1 = NULL) 一樣不 return 值
可知 1 = NULL 的結果不是 true 也不是 false
而是 NULL 或是 unknown
另外在 SQL 裡
空字串 不等於 NULL
- 空字串 是沒有值的已知值
- NULL 是未知值 (unknow)