Oracle SQL提供不同的输出

时间:2014-01-23 19:25:44

标签: sql oracle subquery

有人可以解释为什么这些ORACLE SQL查询提供不同的输出

select * from table2
where  not exists(select 1 from table1 a,table2 b where a.name = b.name and a.age = b.age)


select * from table2 b
where not exists(select 1 from table1 a where a.name = b.name and a.age = b.age)

2 个答案:

答案 0 :(得分:4)

第一个语句在subselect中本地检查是否存在两个表都有公共记录的记录。如果是这样,它将返回table2的所有记录。否则,它返回无行。外部table2和exists中的子选择之间没有关系,您使用两个不相关的table2实例。 因此,这是一个全有或全无的结果:如果exists有记录,那么外部table2的所有行的外部where条件为true,否则对于外部table2的所有行都为false。

第二个查询返回表2的相关记录,这些记录在table1中具有公共记录。

答案 1 :(得分:2)

Query#1检查NOT EXISTS是否有与Table1Table2联接的数据,如果是,则会获取{{>所有记录Table2 1}},如果该连接失败但没有匹配,或记录,如果找到至少一个匹配

Query#2,对于Table2中的每一行,加入Table1并检查NOT EXISTS是否为{{1}}。结果很明显!只有合格记录出来。