赞助商

在大多数SQL实现中,与标准编程语言相反,为什么x!= null不返回true?

发布时间:2019-07-11 发布网站:脚本之家
脚本之家收集整理的这篇文章主要介绍了在大多数SQL实现中,与标准编程语言相反,为什么x!= null不返回true?脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设x是一个具有除null之外的任何值的变量,例如4,作为示例.下面的表达式应该返回什么?
x != null

在我曾经使用的几乎所有编程语言(C#,Javascript,PHP,Python)中,这个表达式或该语言中的等价表达式的计算结果为true.

另一方面,SQL实现似乎完全不同地处理这个问题.如果不等式运算符的一个或两个操作数为NULL,则返回NULL或False.这基本上与大多数编程语言使用的行为相反,而且对我来说非常不直观.

为什么SQL中的行为是这样的?什么是关系数据库逻辑使null的行为与通用编程中的行为有很大不同?

解决方法

大多数编程语言中的null被认为是“已知”,而SQL中的NULL被认为是“未知”.

>因此X == null将X与已知值进行比较,结果已知(true或false).
>但是X = NULL将X与未知值进行比较,结果是未知的(即,再次为NULL).因此,我们需要一个特殊的运算符IS [NOT] NULL来测试它.

我猜这种NULL的动机至少部分是外键的行为.当外键的子端点为NULL时,它不应与任何父项匹配,即使父项为NULL(如果父项是UNIQUE而不是主键,则可能).不幸的是,这带来了比它解决的更多的gotchas,我个人认为SQL应该已经走了“已知”null的路线并完全避免了这种猴子业务.

即使是E. F. Codd,发明者或关系模型,后来也表明传统的NULL不是最优的.但由于历史原因,我们几乎坚持下去.

总结

以上是脚本之家为你收集整理的在大多数SQL实现中,与标准编程语言相反,为什么x!= null不返回true?全部内容,希望文章能够帮你解决在大多数SQL实现中,与标准编程语言相反,为什么x!= null不返回true?所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:76874919,请注明来意。
标签: