SQL为null且= null

时间:2012-03-06 10:24:56

标签: sql null

  

可能重复:
  what is “=null” and “ IS NULL”
  Is there any difference between IS NULL and =NULL

之间有什么区别
where x is null

where x = null

为什么后者不起作用?

4 个答案:

答案 0 :(得分:116)

在SQL中,使用比较运算符(nullnull,{{1}对=值与任何其他值(包括另一个!=)进行比较}},等)将导致<,出于where子句的目的被认为是null(严格来说,它是“不是真的”,而不是“假”,但效果是一样的。)

原因是false表示“未知”,因此与null进行任何比较的结果也是“未知”。因此,您不会通过编码null来获取行数。

SQL提供了一种特殊语法,用于通过where my_column = nullnull来测试列is null,这是测试is not null的特殊条件(或不是一个null)。

这里有一些SQL显示了各种条件及其效果。

null

只返回1行(按预期方式):

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);

SQLFiddle

上查看此内容

答案 1 :(得分:56)

重要的是要注意, NULL不等于NULL

NULL不是值,因此无法与其他值进行比较。

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

where x = null正在检查x是否为NULL,这将永远不会为真

答案 2 :(得分:5)

首先是检查字段值是否为null的正确方法,而以后将无法按预期方式工作,因为null是特殊值,它不等于任何东西,所以你可以' t使用=进行相等比较。

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

where x is null

而不是:

where x = null

答案 3 :(得分:3)

我认为平等是可以绝对决定的。 null的问题在于它本身就是未知数。 null与任何其他值组合为null - 未知。问SQL“我的值是否等于null?”即使输入为空,每次都是未知的。我认为IS NULL的实现很清楚。