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