15

我是 SQL 概念的新手,在研究 NULL 表达式时,我想知道为什么 NULL 不能与 NULL 匹配,谁能告诉我一个真实世界的例子来简化这个概念?

4

9 回答 9

53

规则:即使 NULL 也不能等于 NULL。

非技术方面

如果你问两个女孩,她们几岁?可能你会听到他们拒绝回答你的问题,两个女孩都给你 NULL 作为年龄,这并不意味着两个女孩的年龄相似。所以没有什么可以等于null。

于 2012-10-12T07:10:51.023 回答
17

NULL表示没有值。SQL 的设计者认为,当被问及A(我们不知道它的值)和B(我们不知道它的值)是否相等时,答案必须是UNKNOWN- 它们可能相等,它们可能不是。我们没有足够的信息来决定任何一种方式。

您可能想阅读三值逻辑- SQL 中任何比较的可能结果是TRUE,FALSEUNKNOWN(mysql 将UNKNOWNNULL视为同义词。并非所有 RDBMS 都这样做)

于 2012-10-12T07:10:27.193 回答
4

NULL是一个未知值。因此判断的意义不大NULL == NULL。这就像问“这个未知值是否等于那个未知值” - 不知道......

查看为什么 null 不等于 null false以获得更好的解释

于 2012-10-12T07:10:35.343 回答
4

NULL 是字段中没有数据。

您可以使用 IS NULL 检查 NULL 值

为空

mysql> SELECT NULL IS NULL;
+--------------+
| NULL IS NULL |
+--------------+
|            1 |
+--------------+

1 row in set (0.00 sec)
于 2012-10-12T07:10:38.463 回答
2

如果您需要在 NULL 确实等于 NULL 的情况下进行比较,您可以使用一对coalesce具有特殊默认值的方法。最简单的示例是可空字符串列。

coalesce(MiddleName,'')=coalesce(@MiddleName,'')

如果 @MiddleName 变量具有空值并且 MiddleName 列也具有空值,则此比较返回 true。当然,它也匹配空字符串。如果这是一个问题,您可以将特殊值更改为一些愚蠢的东西,例如

coalesce(MiddleName,'<NULL_DEFAULT>')=coalesce(@MiddleName,'<NULL_DEFAULT>')
于 2016-03-18T19:25:38.460 回答
0

您不能将=用于 NULL,而是可以使用IS NULL

http://www.w3schools.com/sql/sql_null_values.asp

于 2012-10-12T07:11:44.627 回答
0

请点击链接

与任何其他值相比,该NULL值永远不会为真,即使NULL.

要检查我们可以使用

Is Null or Not Null operators ..

文档

如果错了请纠正我

于 2012-10-12T07:15:48.607 回答
0

在 SQL 中,WHERE 子句仅在表达式的结果等于 TRUE 时才包含该值。(这与“如果表达式的结果不是 FALSE”不同)

SQL 中任何一侧具有 NULL 的二进制操作的计算结果为 NULL(将 NULL 视为未知的同义词)

所以

Select ... Where null = null

Select ... Where field = null

Select ... Where null = field

都将不返回任何行,因为在每种情况下 where 类的计算结果为 NULL 不是 TRUE

于 2012-10-12T07:32:07.667 回答
0

实际上 NULL 意味着 UNKNOWN 值所以我们如何比较两个 UNKNOWN 值。

于 2012-10-12T09:52:24.277 回答