你真的了解SQL中的NULL吗? 【数据库|SQL】

 2024-03-10 02:07:16  阅读 0

SQL 中的 NULL

(从 SQL 中的 NULL 翻译而来)

SQL中NULL的概念是什么? 有什么需要注意的吗? 这篇文章就是想把这个问题说清楚。

查询某列值为NULL的数据

当要查询列值为NULL的数据时,下面两个哪个更好?

* 从

哪里 = 空

仍然

* 从

哪里为空

答案是,第二个更好。

为什么? 为什么不在其他比较中使用 IS? 例如,如果您想知道某个字段值是否等于 1,可以使用简单的 WHERE 子句:

其中 = 1

那么为什么要用IS来区别对待NULL呢?

因为:在SQL中,NULL的意思是“”,意思是“未知”,不知道,不明白,未知! (原来的:)

NULL 是“未知”

等于中国人民币多少钱_等于中间一条杠_sql中不等于

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

但也有例外。 例如,在 中,值根本不允许为空字符串,并且 中 的所有空字符串都会自动转换为 NULL。

然而,对于大多数其他数据库,NULL 和空字符串的处理方式有所不同: - 空字符串也是一个值,但它是空的。 - NULL 是“未知”值。 (换句话说,是“未知”,没有“值”的概念)

例如,这就像问:美国总统西奥多·罗斯福的中间名是什么? - 一个答案可能是:我不知道西奥多·罗斯福的中间名是什么。 (在这种情况下,“中间名”字段应该为 NULL) - 另一个答案可能是:西奥多·罗斯福没有中间名。 他的父母没有给他起中间名。 我知道的事实是西奥多·罗斯福没有中间名。 (在这种情况下,“中间名”应该是一个空字符串)

牢记 NULL 是“未知”的概念,您可以轻松处理使用 NULL 时可能遇到的一些麻烦。

例如,下面的WHERE子句将得到true,并且可以找到数据(如果数据库有数据):

* 从

其中 1 = 1

以下子句将变为 false,并且永远找不到数据:

* 从

其中 1 = 0

下面的 WHERE 子句将得到 NULL,因为数据库不知道 1 和 NULL 之间的关系(“未知”)。 它们相等但不相等,数据库不知道,因此 WHERE 子句将得到 NULL(“未知”)。 所以下面的查询永远不会返回任何数据。

* 从

WHERE 1 = NULL 三元逻辑(原文为Logic)

SQL语句中的WHERE子句有三种不同的结果 - true(将返回数据) - false(不会返回数据) - NULL(“未知”不会返回数据)

好吧,既然 false 和 NULL 都不会返回数据,那我们为什么要注意它们的区别呢?

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

例如,下面的语句中,1必须等于1。显然,NOT()之后就会变成假,然后数据就永远不会返回。

* 从

哪里不是(1 = 1)

至于下面这句话,显然NOT()会得到true,当然也会返回数据。

* 从

哪里不是(1 = 0)

但这句话又如何呢?

* 从

哪里不是(1 = NULL)

上面这句话1=NULL是因为数据库不知道NULL是什么,“未知”,所以结果是NULL。 至于NOT(),它不知道NULL是什么以及如何处理它,所以它也会返回NULL,所以WHERE子句得到NULL,既不是真也不是假而是NULL,所以上面的语句Data永远不会回。

好吧,看看下面两个说法。 虽然条件相反,但结果是一样的:不会查询到任何数据。

* 从

哪里不是(1 = NULL)

* 从

其中 1 = IN 且 NULL

NOT IN 也值得注意。

例如,在下面的SQL中,1显然在下面的列表中,WHERE将变为true,并且将查询数据。

* 从

其中 1 IN (1, 2, 3, 4, NULL)

再看看下面的句子。 显然数组里有1,那么NOT IN就会得到假,然后就无法查询到数据了。

* 从

其中 1 不在 (1, 2, 3, 4, NULL)

再看看这个:

* 从

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

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

5 是否在下面的列表中? 数据库不知道,因为里面有NULL。 谁知道 5 等不等于 NULL(“未知”)? 我不知道,所以 5 NOT IN (1, 2, 3, 4, NULL) 返回 NULL,所以查询没有可用数据。

概括

上面,NULL就是NULL,也就是“未知”。 已经介绍了这样一个概念的重要性。 理解这一点在构建复杂的 SQL 时会很有用。

标签: 未知 数据 中间

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码