SQL中的NULL是啥概念?查询列值为NULL数据时这样做更好

托福2025-10-05 10:17:48佚名

SQL 中的 NULL

(译自 NULL in SQL )

SQL里的空值究竟代表什么意思呢,使用时有哪些事项需要留意呢,本文的目的就是对此进行详细说明。

查询某列值为 NULL 的数据

在需要找出某个字段数据为空的情况,比较这两种方法哪个更优null是什么意思,应该怎么做呢?

* FROM

WHERE = NULL

还是

* FROM

WHERE IS NULL

答案是,第二种更好。

sql中null的理解_查询sql中null值_null是什么意思

是什么原因呢,为什么其他对照都不采用 IS 这种方式呢,比如要查询某个数据项是否为1,只需一个基础的查询条件即可

WHERE = 1

所以到底为什么对 NULL 区别对待使用 IS 呢?

由于:在 SQL 语言里,空值代表「不确定性」,就是「不确定性」,不清楚,不明白,不确定!

NULL 是「未知」

在大多数数据库中,NULL 和空字符串是有区别的。

也有特例,例如在某个系统里,明确禁止任何字段填入空白文本,该系统会将所有空白文本内容直接置为无效数据。

然而在其余多数数据库系统中,零值与空白字符会被当作不同对待,

举个例子,就好像问:美国总统西奥多·罗斯福的中间名是什么?

要清楚 NULL 代表着不确定的状态,这样就能轻松应对使用它时遇到的各种问题。

sql中null的理解_查询sql中null值_null是什么意思

例如这个查询条件会返回肯定结果,这样就能检索到记录(前提是数据库中存在相关内容):

* FROM

WHERE 1 = 1

下面的子句会得到 false,永远都查不到数据:

* FROM

WHERE 1 = 0

而接下来的查询条件会返回空值,由于系统无法明确 1 与空值(即不确定状态)之间的关联性,它们是否相等系统无从判断null是什么意思,因此查询条件最终呈现为空值(即不确定状态),导致整个查询无法获取任何结果。

* FROM

WHERE 1 = NULL

三元逻辑(原文为 Logic)

一个 SQL 语句中 WHERE 子句有三种不同的结果

查询sql中null值_null是什么意思_sql中null的理解

既然 false 和 NULL 都不会输出任何信息,为何还要留意它们之间的不同呢?

当遇上 NOT() 的时候就有问题了。

比如,1 确实就是 1,一旦应用否定运算,结果就变为非真,因此将无法获取任何信息。

* FROM

WHERE NOT(1 = 1)

下面这个情况啊,NOT操作之后会产生肯定的结果,所以会有相应的数据输出。

* FROM

WHERE NOT(1 = 0)

但是这句呢?

* FROM

WHERE NOT(1 = NULL)

查询sql中null值_sql中null的理解_null是什么意思

那个等式 1 等于空值,因为数据库系统无法识别空值,把它当作未知情况,因此最终计算结果还是空值。关于 NOT() 来讲,它同样不了解 NULL 是何物,也不清楚该如何应对,因此同样会输出 NULL,这样一来 WHERE 子句接收到的就是 NULL,既不能视为真,也无法看作假,就是 NULL,这样一来,先前那条语句就注定不会产生任何结果。

那么,接下来看这两个表述,它们虽然所提条件互为对立,但最终达成的效果相同:都不会检索到信息。

* FROM

WHERE NOT(1 = NULL)

* FROM

WHERE 1 = NULL

NOT IN 和 NULL

NOT IN 也是非常值得注意的。

例如这个 SQL 语句,1 明确位于后续的清单里,一旦应用 WHERE 条件,结果便会为真,从而能够检索到相关记录。

* FROM

WHERE 1 IN (1, 2, 3, 4, NULL)

sql中null的理解_查询sql中null值_null是什么意思

另有一句,明显 1 位于该列表之内,那么 不属于 就会得到非真值,因此无法检索到信息。

* FROM

哪里不是一,二,三,四,空值

再看这个:

* FROM

五个不包含在数字一,二,三,四以及空值之中

先说答案:这句语句不能查询到数据。

5 是否存在于后续的清单里呢?数据库无法确定,由于其中包含一个 NULL 值,无人知晓 5 是否等于 NULL(即不确定状态),因此无法知晓,所以 5 NOT IN (1, 2, 3, 4, NULL) 的结果为 NULL留学之路,进而导致无法检索到相关数据。

小结

上述内容,NULL 就是 NULL,代表「不确定」,这种认知的必要性就此阐明。领会该点,在编制精密 SQL 时会很有帮助。

相关推荐

猜你喜欢

大家正在看

换一换