对sql中"is null"的一点个人理解

SQL中is null和= null的区别及原因
博客围绕SQL查询中查询字段为null的数据集展开。指出select * from table where column = null写法行不通,正确应区分is null和= null。通过子查询语句示例,说明这样设定是为避免添加无谓条件,防止错误查询出数据。

你可能会有这样的困惑,当你想查询某个字段是null的数据集时,你写下

select * from table where column = null

这样显然是行不通的。正确写法如下:

select * from table where column is null

那么,为什么要这样设定的?

 

今天在写一条子查询语句的时候我就体会到了这样设定的好处,这条子查询如下:

select t.* from table1 t
where t.acct_id = (select acct_id from table2 where staff_id = 'xxx')

当我写下这句时,我就在考虑,如果子查询里得到的结果是null怎么办?

如果是子查询里的结果为null,那么我预期的结果自然应该是查不出任何数据,因为 table1 中有许多acct_id为null的数据,所以我担心会把那些数据给查出来。那我是不是要加一句条件防止这种情况呢?

select t.* from table1 t
where t.acct_id = (select acct_id from table2 where staff_id = 'xxx')
-- 新加的条件
and exists (select 1 from table2 where staff_id = 'xxx')

我尝试了一下,发现是这样做是没有必要的。

正如我开篇所说:select * from table where column = null 是查不出任何结果的。

也许正是为了避免这样无谓的条件,所以才区分开 is null 和 = null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值