[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)