Possible Duplicate:
what is “=null” 和 “ IS NULL”
Is there any difference between IS NULL 和 =NULL

两者的区别是什么

where x is null

where x = null

和 why does the latter not work?

推荐答案

在SQL中,使用比较运算符(例如=!=<等)将null值与任何其他值(包括另一个null)进行比较,将得到null,就where子句而言,null被视为false(严格来说,它是"not true",而不是"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码了吗

Sql相关问答推荐

协助 PERCENTILE_CONT 函数和 GROUP 错误

在 Presto SQL 的 where 子句中使用 Max()

任何查询的数组列的 Postgres 索引类型

如何在 SQL 中连续计算大于或等于自身的所有内容?

按日期、学生框架中的条件取最近的行

使用 SQL Server 将列转换为多行

如何找出具有多个条件的相同值并将同一列的值放在不同的列中?

Postgres:冲突时,对两个向量(数组)求和

在离开时计算不同的值

如何在此 SQL 查询中使用 WHERE 子句?

如何按行对项目进行分组

try 在 SQL Server 中显示包含开始和结束日期、工作时间和小时费率的员工工作详细信息时如何避免重复?

oracle DB 为什么字符串中有空间比较总是返回false?

查询在特定条件下选择限制

可以在 Oracle View 中进行复杂的汇总或求和吗?

SQL:从时间戳日期中减去 1 天

如何在 SQL 中获取前导 0 的月份和日期? (例如 9 => 09)

Google Electron 表格“=QUERY”join() 等效函数?

使用 Python 连接到 Microsoft SQL 服务器

查询、本机查询、命名查询和类型查询之间的区别