Oracle中的in和not in
在日常的数据统计中,尽量不要用not in
来查询数据,可以考虑使用exist
或者left join
来代替。
但是如果用到in
和 not in
时,必须要考虑null
值的影响,不能简单理解为not in 是in的差集。举例
- 原数据
- 关联表
- 使用
in
- 使用
not in
由上面查询结果可见,用in
函数查询时有两条数据,但是利用not in
时候没有得到剩下的两条数据,反而为空集。这是因为在not in
后面的结果集里面有null
值,而id not in ('','1','2')
相当于id<>'' and id <>'1' and id <>'2'
,但是col<>null
是一个永假式,所以查询的结果为空集。