exists的用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了exists的用法相关的知识,希望对你有一定的参考价值。

今天突然看到之前自己写的一个代码 久久没想通为毛。。 看来笔记还是需要

 

exists可以代替子查询in  比in 更高效

 
默认是exists 查询中包含有数据则条件成立。。否则没数据
select * from table where exists(select count(*) from table2  tb2 where tb2.id==1)    exists查询出数据则 条件成立 显示所有table中的数据
  
当处理需要查询父表的某列 需要满足子表的列结果时就可以用exists来代替in
 
in写法
 
select * from table1 t
where  t.id in(select tb2id from table2);
 
 
exists写法
select * from table1 t
where exists(select * from table2 t2 where t2.id=t1.id);
个人理解 执行方式是 先查出table1的数据 然后通过table1的数据一条一条匹配table2的数据条件成立(table1的id在table2中存在 则这条数据成立)则输出
 
应用场景1 查询部门以及部门以下数据时候  部门表的每条数据 需要在path记录他上层父类的id  这个就是我当前需求用到的。
 
别人的效率测试
 在oracle 10g中,in 和 exists其实是一样的,原理就是两张表做HASH JOIN SEMI。也可以通过10053事件看到两条sql语句最终转换成同一条sql。
 not in 性能 大于not exists  test1的数据量5条,test2数量40多万条。
 not exists 性能 大于not in  test1的数据量1000条,test2数量50687条。

以上是关于exists的用法的主要内容,如果未能解决你的问题,请参考以下文章

sql中exists,not exists的用法

exists的用法

DB2 替代 EXISTS 函数

eXist-db 上的 XML:错误:XPST0003 意外令牌

SQL 语句中 exists和not exists的用法

oracle中的exists 和not exists 用法详解