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