我正在浏览MySql的教程,我通过以下查询。
mysql> select null <> null;
+--------------+
| null <> null |
+--------------+
| NULL |
+--------------+
我不明白为什么结果为Null,我认为它需要为1或0(基于其他比较运算符的结果)?
为什么它将结果作为Null。
谢谢,
答案 0 :(得分:1)
因为在sql过滤器中出现的NULL
之上的任何比较运算符应该(并且确实)使得行不被选中。
您应该使用null安全操作符<=>
来比较包含NULL
值和其他NOT NULL
值的列,但当两个操作数都是<=>
时,1
将返回NULL
NULL
因为NULL
永远不会被视为等于Phones
----
Number
CountryCode (can be NULL)
。
这是一个空安全运算符很有用的情况示例:
你有一张桌子:
SELECT Number FROM Phones WHERE CountryCode <> 34;
并且您要选择所有不是来自西班牙的电话号码(国家/地区代码34)。第一次尝试通常是:
SELECT Number FROM Phones WHERE CountryCode <=> 34;
但是你注意到没有国家代码(NULL值)的电话没有列出,你想把它们包含在你的结果中,因为它们不是来自西班牙:
{{1}}
答案 1 :(得分:1)
select null <> null;
此处<>
不是null safe operator
。它是Not equal operator
。
请参考mysql的official website
Null safe operator
为<=>