IN,NOT IN,ANY和ALL用于比较子查询返回多行数据时你不知道的陷阱

本文揭示了在使用IN, NOT IN, ANY和ALL操作符处理子查询返回多行数据时可能遇到的潜在问题和陷阱,通过实例解析这些条件在SQL查询中的正确用法和潜在风险。" 128544815,16156985,工业建筑应急照明系统设计原则与电气问题解决方案,"['电气安全', '工业建筑', '应急照明系统']
摘要由CSDN通过智能技术生成

本文简单讲述一下在使用IN,NOT IN,ANY,ALL等对从子查询中返回的数据做比较的时候一不小心就会犯的错误.
测试的的数据如下:TEST表中有3条数据,其中id为3的行name的值为null.

ID Name
1 name1
2 name2
3  

1,IN在子查询不返回数据的时候得到结果是false,这个比较容易理解.如下面的SQL不会查询到数据.
select * from test  where name in (select name from test where id=4)
select * from test  where name =any (select name from test where id=4)
2,IN在子查询返回的数据中有null值的时候,null不会用于比较,下面的语句只会返回id为2的行,id为3的行不会返回(null只能用is来比较)
select * from test  where name in (select name from test where id=3 or id=2)
select * from test  where name =any (select name from test where id=3 or id=2)
3,NOT IN在子查询不返回数据的时候得到结果是true,下面的语句会返回3条数据.
select * from test  where name not in (select name from test where id=4)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值