为什么在SQL NULL中无法与NULL匹配?

时间:2012-10-12 07:06:52

标签: mysql sql sql-server oracle null

我是SQL概念的新手,在研究NULL表达式时我想知道为什么NULL无法与NULL匹配,任何人都可以告诉我一个简单的这个概念的真实世界的例子吗?

9 个答案:

答案 0 :(得分:44)

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

非技术方面

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

答案 1 :(得分:14)

NULL表示值的缺席。 SQL的设计者认为,当被问及A(我们不知道它的价值)和B(我们不知道它的价值)是否相等时,它是有意义的,答案是正确的必须是UNKNOWN - 他们可能是平等的,他们可能不是。我们没有足够的信息来决定这两种方式。

您可能希望阅读Three valued logic - SQL中任何比较的可能结果都是TRUEFALSEUNKNOWN(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

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

答案 6 :(得分:0)

请关注link

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

要检查我们可以使用

Is Null or Not Null operators ..

Document

如果错误,请纠正我

答案 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值。