oracle查询语句中的exists 和in 的详细用法
2011-01-28 11:53
771 查看
举两个例子:
两个例子的查询结果是一样的,都是查询A中ID不存在于B表中的所有数据,是筛选了A中的数据的结果集
其实明白了一种用法再去理解另一个是有难度的,比如我先是会用了in的用法 再接触exists的时候 就迷茫了。
只要明白一点就能理解两者的区别,in是先执行子查询 把查询结果返回到主查询作为主查询的条件。exists是一条线下来,作为一个整体的条件 去筛选数据。
in具体到字段,例子1中,先查询到B表中的AID,然后返回结果,筛选表A的数据
exists是先执行主查询,然后对每一条数据进行筛选,子查询返回的值相当于“是否”,例子2中,先查询出A中的数据,然后判断子查询的bool,“not exists”为否,如果子查询也为“否”,那结果就成立 就说明这个AID的数据是要查询的数据,如果子查询为“是” 那结果就不成立,则不返回这个AID的数据。
这样理解的话就不难了,结果和in的查询结果是一样的,不过在理解的时候正好相反。
例子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的查询结果是一样的,不过在理解的时候正好相反。
相关文章推荐
- ORACLE in与exists语句的查询效率的区别
- oracle中的exists 和not exists 用法 in与exists语句的效率问题
- sql语句中的 in 、not in 、exists、not exists 详细用法说明和差别----not in失效
- sql语句中的 in 、not in 、exists、not exists 详细用法说明和差别----not in失效
- oracle中的exists 和not exists 用法详解 (和in)
- ORACLE in与exists语句的区别
- Oracle中简单查询、限定查询、数据排序SQL语句范例和详细注解
- oracle中in和exists、not in和not exists的用法与效率
- mysql查询语句in和exists二者的区别和性能影响
- sql查询语句的优化,exists与in的更换
- mysql查询语句in和exists二者的区别和性能影响
- SQL查询中in、exists、not in、not exists的用法与区别
- oracle中的exists 和 in (ps:查询条件在括号内容值域)
- oracle 中exists,not exists的用法以及和exists和in的区别
- ORACLE in与exists语句的区别
- ORACLE case when查询语句用法
- oracle 中的 exists 和 in 用法
- ORACLE in与exists语句的区别
- 关于oracle中查询语句 decode和 case when 的用法