a = null 和 a is null 的本质区别

在 MySQL 中,a = nulla is null 是有本质区别的,主要在于它们如何处理 NULL 值。

在 MySQL(以及大多数遵循 SQL 标准的数据库)中,如果你想检查一个列的值是否为 NULL,请务必使用 IS NULLIS NOT NULL,而不是 =!=

表达式目的aNULL 时的结果a 不是 NULL 时的结果是否正确/推荐
a = null(错误地) 尝试比较值是否等于 NULLUNKNOWN (视为 FALSE)UNKNOWN (视为 FALSE)
a is null正确地 检查值是否为 NULLTRUEFALSE
a is not null正确地 检查值是否 不是 NULLFALSETRUE

核心区别:

  • a is null:这是 正确标准 的检查列 a 的值是否为 NULL 的方式。

  • a = null:这 不是 检查值是否为 NULL 的标准方式,并且在大多数情况下 不会 按预期工作。

一、NULL 的特殊性

  • NULL 在 SQL 中代表“未知”、“缺失”或“不适用”的值。它不是一个具体的值(如 0 或空字符串 '')。

  • 根据 SQL 标准,任何与 NULL 进行的常规比较(使用 =, <, >, <>, != 等操作符)的结果都是 UNKNOWN(未知)。在 WHERE 子句中,UNKNOWN 的结果通常被视为 FALSE,因此不会匹配任何行。

  1. a = null 的行为

    • 当你写 WHERE a = null 时,MySQL 会尝试将列 a 中的值与 NULL 进行比较。

    • 如果 a 的值不是 NULL (例如 a = 5): 5 = null 的结果是 UNKNOWN

    • 如果 a 的值本身就是 NULLnull = null 的结果 仍然是 UNKNOWN。这是因为你无法确定一个未知值是否等于另一个未知值。

    • 结论:因此,WHERE a = null 这个条件永远不会为 TRUE,它 无法 帮你筛选出 a 列值为 NULL 的行。

  2. a is null 的行为

    • SQL 提供了专门的操作符 IS NULLIS NOT NULL 来处理 NULL 值的检查。

    • IS NULL 是一个 类型检查 操作符,它直接判断一个值 是否为 NULL 类型

    • 如果 a 的值是 NULLa is null 的结果是 TRUE

    • 如果 a 的值不是 NULLa is null 的结果是 FALSE

    • 结论:因此,WHERE a is null 是筛选出 a 列值为 NULL 的行的 正确且唯一可靠 的方法。

二、类比:

想象 NULL 是一个“不知道里面是什么”的盒子。

  • a = null 就像在问:“这个盒子里的东西,和那个‘不知道里面是什么’的盒子里的东西,是一样的吗?” 答案永远是:“不知道”(UNKNOWN)。

  • a is null 就像在问:“这个盒子 是不是 ‘不知道里面是什么’的盒子?” 答案是明确的:“” (TRUE) 或 “不是” (FALSE)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值