加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 08:27:12 所属栏目:MsSql教程 来源:网络整理
导读:假设x是一个具有除null之外的任何值的变量,例如4,作为示例.下面的表达式应该返回什么? x != null 在我曾经使用的几乎所有编程语言(C#,Javascript,PHP,Python)中,这个表达式或该语言中的等价表达式的计算结果为true. 另一方面,SQL实现似乎完全不同地处理这个
假设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不是最优的.但由于历史原因,我们几乎坚持下去.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读