案例說明SQL語言中 is null 和 =null 的區別
之前在某網站中遇到了一道題:某商城包含兩個表,Customers 表和 Orders 表。編寫一個 SQL 查詢,找出所有從不訂購任何東西的客戶。
Customers:
id | name | |
---|---|---|
1 | J | |
2 | H | |
3 | S | |
4 | M |
Orders:
id | CustomerId | |
---|---|---|
1 | 3 | |
2 | 1 |
題目很簡單只需要兩張表進行左連接,然后找出為null的字段就行,但其中卻包含陷阱;
select name as Customers
from Customers c left join Orders o
on c.id = o.CustomerId
where o.CustomerId is null;
仔細想想為什么where條件是is null;而不是 = null?
如果用=null查詢的結果是空值;
我們首先仔細想想左連接有什么樣的特點?當兩張表進行左連接的時候,左邊的表會全部保留,而右邊的表會根據關聯字段進行保留,如果關聯字段不相等的,右邊會默認為null;例如上面案例:
左右連接產生的是字符串的'NULL'而不是沒有值而產生的NULL;
所以當我們用is null的時候可以查出數據,而用=null卻查不出數據;
總結:
IS NULL 是判斷某個字符是否為空,並不代表空字符或者是0;
=NULL 是判斷某個值是否等於NULL,可能是沒有值;