(008)每日SQL学习:Oracle Not Exists 及 Not In 使用

Posted ThinkDifferent

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(008)每日SQL学习:Oracle Not Exists 及 Not In 使用相关的知识,希望对你有一定的参考价值。

今天遇到一个问题,not in 查询失效,我以为是穿越了,仔细查了点资料,原来理解有误!

select value from temp_a a
where a.id between 1 and 100
and not exists(select * from temp_b b where a.value=b.value);

这时能查出结果

select value from temp_a a
where a.id between 1 and 100
and a.value not in(select value from temp_b);

此时查出的结果为空.

经过google终于找出原因: 内表(temp_b)有空值. 用not in得到的结果集都为空.以下是结论:

1、对于not exists查询,内表存在空值对查询结果没有影响;对于not in查询,内表存在空值将导致最终的查询结果为空。

2、对于not exists查询,外表存在空值,存在空值的那条记录最终会输出;对于not in查询,外表存在空值,存在空值的那条记录最终将被过滤,其他数据不受影响。

本文转自:http://blog.csdn.net/haitaofeiyang/article/details/50158395

以上是关于(008)每日SQL学习:Oracle Not Exists 及 Not In 使用的主要内容,如果未能解决你的问题,请参考以下文章

《oracle每日一练》免安装Oracle客户端使用PL/SQL

Oracle SQL:WHERE NOT EXISTS 无法正常运行

关于Oracle SQL中NOT IN子句的工作机制

mysql 或oracle的sql中not in 使用的注意

java.sql.SQLException: not support oracle driver 1.0

Oracle查询提示 ORA-00933: SQL command not properly ended 原因排查