您的位置:首页 > 数据库 > Oracle

oracle查询语句中的exists 和in 的详细用法

2011-01-28 11:53 771 查看
举两个例子:

例子1:select ID from A where ID not in(select AID from B)
例子2:select ID from A where not exists(select AID from B where AID=A.ID)


两个例子的查询结果是一样的,都是查询A中ID不存在于B表中的所有数据,是筛选了A中的数据的结果集

其实明白了一种用法再去理解另一个是有难度的,比如我先是会用了in的用法 再接触exists的时候 就迷茫了。

只要明白一点就能理解两者的区别,in是先执行子查询 把查询结果返回到主查询作为主查询的条件。exists是一条线下来,作为一个整体的条件 去筛选数据。

in具体到字段,例子1中,先查询到B表中的AID,然后返回结果,筛选表A的数据

exists是先执行主查询,然后对每一条数据进行筛选,子查询返回的值相当于“是否”,例子2中,先查询出A中的数据,然后判断子查询的bool,“not exists”为否,如果子查询也为“否”,那结果就成立 就说明这个AID的数据是要查询的数据,如果子查询为“是” 那结果就不成立,则不返回这个AID的数据。

这样理解的话就不难了,结果和in的查询结果是一样的,不过在理解的时候正好相反。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: