博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
exists的用法
阅读量:5093 次
发布时间:2019-06-13

本文共 801 字,大约阅读时间需要 2 分钟。

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

 

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条。

转载于:https://www.cnblogs.com/LQBlog/p/5174599.html

你可能感兴趣的文章
深刻理解Python中的元类(metaclass)
查看>>
[转]java String的经典问题(new String(), String)
查看>>
.net Core使用RabbitMQ
查看>>
博客园博客转至个人网站博客声明
查看>>
linux安装Linux下软件的安装与卸载方法
查看>>
nginx模块
查看>>
牛客网 牛客小白月赛2 H.武-最短路(Dijkstra)
查看>>
Memo组件
查看>>
多普达D700手机利用USB电缆与电脑连接上网方法
查看>>
C语言循环的嵌套
查看>>
Unity3D研究院之手游开发中所有特殊的文件夹(转)
查看>>
bitmap格式分析(转)
查看>>
Mysql密码加密方式
查看>>
一探前端开发中的JS调试技巧
查看>>
eclipse从SVN检出的项目大面积报错怎么办
查看>>
利用Linux系统生成随机密码的8种方法
查看>>
clear:both 有高度的问题
查看>>
global中拦截404错误的实现方法
查看>>
哈希表
查看>>
web基础
查看>>