我是 SQL 概念的新手,在研究 NULL 表达式时,我想知道为什么 NULL 不能与 NULL 匹配,谁能告诉我一个真实世界的例子来简化这个概念?
9 回答
规则:即使 NULL 也不能等于 NULL。
非技术方面
如果你问两个女孩,她们几岁?可能你会听到他们拒绝回答你的问题,两个女孩都给你 NULL 作为年龄,这并不意味着两个女孩的年龄相似。所以没有什么可以等于null。
NULL
表示没有值。SQL 的设计者认为,当被问及A
(我们不知道它的值)和B
(我们不知道它的值)是否相等时,答案必须是UNKNOWN
- 它们可能相等,它们可能不是。我们没有足够的信息来决定任何一种方式。
您可能想阅读三值逻辑- SQL 中任何比较的可能结果是TRUE
,FALSE
和UNKNOWN
(mysql 将UNKNOWN
和NULL
视为同义词。并非所有 RDBMS 都这样做)
NULL
是一个未知值。因此判断的意义不大NULL == NULL
。这就像问“这个未知值是否等于那个未知值” - 不知道......
查看为什么 null 不等于 null false以获得更好的解释
NULL 是字段中没有数据。
您可以使用 IS NULL 检查 NULL 值
见为空
mysql> SELECT NULL IS NULL;
+--------------+
| NULL IS NULL |
+--------------+
| 1 |
+--------------+
1 row in set (0.00 sec)
如果您需要在 NULL 确实等于 NULL 的情况下进行比较,您可以使用一对coalesce
具有特殊默认值的方法。最简单的示例是可空字符串列。
coalesce(MiddleName,'')=coalesce(@MiddleName,'')
如果 @MiddleName 变量具有空值并且 MiddleName 列也具有空值,则此比较返回 true。当然,它也匹配空字符串。如果这是一个问题,您可以将特殊值更改为一些愚蠢的东西,例如
coalesce(MiddleName,'<NULL_DEFAULT>')=coalesce(@MiddleName,'<NULL_DEFAULT>')
您不能将=用于 NULL,而是可以使用IS NULL
在 SQL 中,WHERE 子句仅在表达式的结果等于 TRUE 时才包含该值。(这与“如果表达式的结果不是 FALSE”不同)
SQL 中任何一侧具有 NULL 的二进制操作的计算结果为 NULL(将 NULL 视为未知的同义词)
所以
Select ... Where null = null
Select ... Where field = null
Select ... Where null = field
都将不返回任何行,因为在每种情况下 where 类的计算结果为 NULL 不是 TRUE
实际上 NULL 意味着 UNKNOWN 值所以我们如何比较两个 UNKNOWN 值。