5.1 缺乏意義
SQL 語言和 Java 語言一樣,有一個特殊的關鍵字來表示值的缺失——它是 null。或者正如它經常寫的那樣 - NULL
。
SQL 中的用法NULL
與 Java 中 null 的用法非常相似。在 Java 中,可能存在其字段包含空值的對象。在 SQL 中,可能存在其行包含 NULL 值的表。
讓我特意在我們的產品表中添加一些無品牌產品。如果產品的品牌未知,則該值為NULL
。
要顯示此類產品,讓我們按id倒序對我們的產品表進行排序,並取 10 條記錄。該請求將如下所示:
SELECT * FROM product
ORDER BY id DESC
LIMIT 10
我們得到如下查詢結果:
ID | 姓名 | 品牌 | 價格 | 數數 |
---|---|---|---|---|
15 | 鉚釘 | 無效的 | 0.01 | 1000 |
14 | 擰緊 | 無效的 | 0.10 | 1000 |
13 | 站立 | 宜家 | 100.00 | 10 |
12 | 花盆 | 聰明花 | 99.00 | 9 |
十一 | 扶手椅 | 博世 | 44.00 | 8個 |
10 | 盤子 | 博世 | 199.00 | 10 |
9 | 梳妝台 | 宜家 | 99.00 | 10 |
8個 | 燈 | LG | 15.00 | 100 |
7 | 電視 | LG | 350.00 | 4個 |
6個 | 架子 | 博世 | 25.00 | 114 |
是的,我在桌子上加了鉚釘和螺絲。他們有價格和數量,但沒有品牌。
5.2 與 NULL 的比較
你還記得你以前在 Java 中使用 null 時會很生氣嗎?您不能通過 equals() 比較可以引用空值的變量。例子:
Product product1 = new Product();
Product product2 = null;
if (product2.equals(product1) { //an exception will be raised here
…
}
您可能不會相信,但在 SQL 語言中,您也在等待處理 NULL 值時的細微差別。聽起來像這樣:什麼都不是 NULL.
如果您嘗試過濾掉品牌為的所有產品null
:
SELECT * FROM product
WHERE brand = NULL
你會得到一個空表:
ID | 姓名 | 品牌 | 價格 | 數數 |
---|
但是,如果您在查詢中寫入brand不等於NULL
,您將得到相同的結果:
SELECT * FROM product
WHERE brand != NULL
你會再次得到一個空表:
ID | 姓名 | 品牌 | 價格 | 數數 |
---|
與 NULL 的任何比較/操作都將返回 NULL:
表達 | 結果 |
---|---|
品牌 = NULL | 無效的 |
品牌 != NULL | 無效的 |
空 = 空 | 無效的 |
空!= 空 | 無效的 |
是的,即使你將 NULL 與 NULL 進行比較,那麼答案也將是 NULL.
5.3 IS NULL 和 IS NOT NULL
那麼我們如何檢查某些字段(或某些列)的值為NULL
?為此,SQL 有一個特殊的表達式 - IS NULL
。看起來像這樣。
variable IS NULL
如果你想檢查你的表的列是否不等於NULL
,那麼你需要寫IS NOT NULL
:
variable IS NOT NULL
讓我們編寫一個查詢,從產品表中選擇品牌等於 的所有產品NULL
。這樣的請求看起來像這樣:
SELECT * FROM product
WHERE brand IS NULL
我們得到以下查詢結果:
ID | 姓名 | 品牌 | 價格 | 數數 |
---|---|---|---|---|
14 | 擰緊 | 無效的 | 0.10 | 1000 |
15 | 鉚釘 | 無效的 | 0.01 | 1000 |
現在讓我們顯示所有價格低於 20 美元的產品:
SELECT * FROM product
WHERE price < 20
我們得到以下查詢結果:
ID | 姓名 | 品牌 | 價格 | 數數 |
---|---|---|---|---|
2個 | 椅子 | 宜家 | 5.00 | 45 |
8個 | 燈 | LG | 15.00 | 100 |
14 | 擰緊 | 無效的 | 0.10 | 1000 |
15 | 鉚釘 | 無效的 | 0.01 | 1000 |
現在我們指定價格必須低於 $20 而品牌不是NULL
。
SELECT * FROM product
WHERE price < 20 AND brand IS NOT NULL
我們得到如下查詢結果:
ID | 姓名 | 品牌 | 價格 | 數數 |
---|---|---|---|---|
2個 | 椅子 | 宜家 | 5.00 | 45 |
8個 | 燈 | LG | 15.00 | 100 |
太好了,最後兩行不見了。這是它的工作原理。有點不尋常,但這其中還是有一定的邏輯的。
GO TO FULL VERSION