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

前端之家收集整理的这篇文章主要介绍了在大多数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不是最优的.但由于历史原因,我们几乎坚持下去.

猜你在找的MsSQL相关文章