gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:28:25 25 4
gpt4 key购买 nike

让我们假设x是一个除了null以外的任何值(例如4)的变量。以下表达式应返回什么?

x != null

在我曾经使用过的几乎每种编程语言(C#,Javascript,PHP,Python)中,此表达式或该语言的等效表达式的计算结果均为 true

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

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

最佳答案

在大多数编程语言中,null被认为是“未知”,而在SQL中,null被认为是“未知”。

  • 因此,X == null将X与已知值进行比较,并且结果为已知(正确或错误)。
  • 但是X = NULL将X与未知值进行比较,结果未知(即再次为NULL)。因此,我们需要一个特殊的运算符IS [NOT] NULL对其进行测试。

  • 我猜这种空值的动机至少有一部分是外键的行为。当外键的子端点为NULL时,即使父键为NULL,也不应与任何父键匹配(如果父键为UNIQUE而不是主键,则可以)。不幸的是,这带来了更多的 gotchas而不是它解决的问题,我个人认为SQL应该走了“已知” null的路线,并且完全避免了这种猴子生意。

    甚至发明家或关系模型的E. F. Codd后来都指出,传统的NULL并不是最佳的。但是由于历史原因,我们对此几乎一无所知。

    关于sql - 与标准编程语言相比,在大多数SQL实现中,为什么x!= null不返回true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11145944/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com