【问题标题】:Why in SQL NULL can't match with NULL?为什么 SQL 中的 NULL 不能与 NULL 匹配?
【发布时间】:2012-10-02 23:12:02
【问题描述】:

我是 SQL 概念的新手,在研究 NULL 表达式时,我想知道为什么 NULL 不能与 NULL 匹配,谁能告诉我一个现实世界的例子来简化这个概念?

【问题讨论】:

  • ....is null?
  • 是的。有趣的事情:sqlfiddle.com/#!2/d41d8/2746 :)
  • @PraveenKumar,您可以检查某些内容是否为空。但不能比较,因为结果是未知的,比如除以零。
  • 啊,谢谢你的解释!
  • 更糟糕的是,"bla" != NULL 为假,即使该 NULL 来自另一列。

标签: mysql sql sql-server oracle null


【解决方案1】:

规则:即使是 NULL 也不能等于 NULL。

非技术方面

如果你问两个女孩,她们几岁?也许你会听到他们拒绝回答你的问题, 两个女孩都给你 NULL 作为年龄,这并不意味着两个女孩的年龄相似。 所以没有什么可以等于null。

【讨论】:

  • @JoeNorman 很高兴为您提供帮助,但请考虑阅读 Damien 和其他人的答案,他们列出了技术方面。
  • @JoeGJoseph 谢谢老兄.. 实际上前一天我向我办公室的一位女士提出了类似的问题,她拒绝在她生日那天回答。 :P
  • 它在我脑海中的意义:null 是一种状态......不是一个值。值不能等于存在状态。
【解决方案2】:

NULL 表示值的不存在。 SQL 的设计者认为,当被问及A(我们不知道它的值)和B(我们不知道它的值)是否相等时,答案一定是@987654325 @ - 它们可能相等,也可能不相等。我们没有足够的信息来决定哪种方式。

您可能想阅读Three valued logic - SQL 中任何比较的可能结果是TRUEFALSEUNKNOWN(mysql 将UNKNOWNNULL 视为同义词。并非所有RDBMS做)

【讨论】:

    【解决方案3】:

    NULL 是一个未知值。因此判断NULL == NULL 毫无意义。这就像问“这个未知值是否等于那个未知值” - 没有线索..

    请参阅why is null not equal to null false 以获得更好的解释

    【讨论】:

      【解决方案4】:

      NULL 是字段中没有数据。

      您可以使用 IS NULL 检查 NULL 值

      IS NULL

      mysql> SELECT NULL IS NULL;
      +--------------+
      | NULL IS NULL |
      +--------------+
      |            1 |
      +--------------+
      
      1 row in set (0.00 sec)
      

      【讨论】:

        【解决方案5】:

        如果您需要在 NULL 确实等于 NULL 的情况下进行比较,您可以使用一对带有 特殊 默认值的 coalesce 方法。最简单的示例是可空字符串列。

        coalesce(MiddleName,'')=coalesce(@MiddleName,'')
        

        如果 @MiddleName 变量具有空值并且 MiddleName 列也具有空值,则此比较返回 true。当然,它也匹配空字符串。如果这是一个问题,您可以将特殊值更改为一些愚蠢的东西,例如

        coalesce(MiddleName,'<NULL_DEFAULT>')=coalesce(@MiddleName,'<NULL_DEFAULT>')
        

        【讨论】:

          【解决方案6】:

          您不能将 = 用于 NULL,而可以使用 IS NULL

          http://www.w3schools.com/sql/sql_null_values.asp

          【讨论】:

            【解决方案7】:

            请关注link

            与任何其他值相比,NULL 值永远不会为真,即使是 NULL

            检查我们可以使用

            Is Null or Not Null operators ..
            

            Document

            如果有错请指正

            【讨论】:

              【解决方案8】:

              在 SQL 中,WHERE 子句仅在表达式的结果等于 TRUE 时才包含该值。 (这与“如果表达式的结果不为 FALSE”不同)

              SQL 中任何一侧为 NULL 的二元运算都会计算为 NULL(将 NULL 视为未知的同义词)

              所以

              Select ... Where null = null
              
              Select ... Where field = null
              
              Select ... Where null = field
              

              将不返回任何行,因为在每种情况下 where 类的计算结果都是 NULL,它不是 TRUE

              【讨论】:

                【解决方案9】:

                其实 NULL 表示 UNKNOWN 值那么我们如何比较两个 UNKNOWN 值。

                【讨论】:

                  猜你喜欢
                  • 2023-04-11
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-07-05
                  • 2017-07-09
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-12-14
                  相关资源
                  最近更新 更多