SQL 为 null 且 = null

可能的复制品:
什么是空,什么是空,什么是空,什么是空,什么是空
IS NULL 和 = NULL 之间有什么区别吗

有什么区别

where x is null

还有

where x = null

为什么后者不起作用?

158294 次浏览

首先是检查一个字段值是否为 null的正确方法,然后检查它是否不会按照您预期的方式工作,因为 null是不等于任何值的特殊值,所以您不能使用 =对它进行等式比较。

因此,当您需要检查字段值是否为 null时,请使用:

where x is null

而不是:

where x = null

在 SQL 中,使用比较运算符(如 =!=<等)将 null值与任何其他值(包括另一个 null)进行比较,就 where 子句而言,null被认为是 false(严格地说,它是“非真”,而不是“假”,但效果是相同的)。

原因是 null的意思是“未知的”,所以任何与 null的比较结果也是“未知的”。因此,通过编码 where my_column = null,您将不会得到对行的命中。

SQL 通过 is nullis not null提供了测试列是否为 null的特殊语法,这是测试 null(或非 null)的特殊条件。

下面是一些 SQL,它们显示了各种条件及其效果,如上所示。

create table t (x int, y int);
insert into t values (null, null), (null, 1), (1, 1);


select 'x = null' as test , x, y from t where x = null
union all
select 'x != null', x, y from t where x != null
union all
select 'not (x = null)', x, y from t where not (x = null)
union all
select 'x = y', x, y from t where x = y
union all
select 'not (x = y)', x, y from t where not (x = y);

只返回1行(如预期的那样) :

TEST    X   Y
x = y   1   1

看看这个在 SQLFiddle上运行

值得注意的是 NULL 不等于 NULL

NULL不是一个值,因此不能与另一个值进行比较。

where x is null检查 x 是否为空值。

where x = null检查 x 是否等于 NULL,这永远不会为真

我认为平等是完全可以确定的。null的问题在于它本身是未知的。结合任何其他值的 Nullnull-未知。问 SQL“我的值是否等于 null?”将是未知的每一次,即使输入是 null。我认为 IS NULL的实施表明了这一点。