举例说明SQL中 in和exists的区别
in和exists的区别
新建两个表
user表
account表
in
SELECT * FROM user u where u.id in (select user_id from account )
查询结果
查询过程:
- 先查子查询,即执行
select user_id from account
- 查父查询,即执行
SELECT * FROM user u
- 两个查询形成笛卡尔积,按照条件
u.id = user_id
进行筛选,也就是对于父查询的每一条记录,如果其中的u.id在子查询的结果集合中,则输出这条记录。
exists
select * from user u where exists(select * from account a where u.id = a.id )
查询结果
结果与in相同
查询过程
- 先进行父查询,即
select * from user u
- 对于父表的每一条记录都进行子查询,即
select * from account a where u.id = a.id
对每一次子查询都进行判断,如果查出结果,返回true,输出父查询的语句。
注意:
这里的子查询select和from之间可以是任意字段,因为exists返回的是true和false,不是结果集。只是证明它存在。
总结
in
如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in
exists
如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists
举例说明SQL中 in和exists的区别相关推荐
- sql中exits和in的区别
sql中exits和in的区别 转:http://hi.baidu.com/delphi_relive/blog/item/d7c0034a49c4932208f7ef21.html in 和 exi ...
- MySQL中In与Exists的区别
MySQL中In与Exists的区别 1 例子 2 EXISTS和IN的介绍 2.1 exists 2.2 in 2.3 使用上的区别 3 EXISTS和IN的性能分析 4 总结 1 例子 有两个表需 ...
- SQL中where与having的区别
SQL中where与having的区别 目录 SQL中where与having的区别 创建表 插入数据 进行聚合操作 # WHERE是在聚合之前进行数据行的过滤而HAVING实在聚合之后进行新数据的过 ...
- SQL中modify和alter用法区别
SQL中modify和alter用法区别 1. 所属能力大小不同: modify:只能用于修改字段的属性 例如:把age字段变为非空(针对persons表中的age这一个字段进行修改) ALTER T ...
- 数据库查询语句SQL中like、%、-的区别
数据库查询语句SQL中like.%.-的区别 数据库查询语句SQL中like.%.-的区别 %百分号通配符:表示任何字符出现任意次数(可以是0次) SQL 语句选取 name 以字母 "k& ...
- sql中=null和is null区别
sql中=null和is null区别 前言 关于sql语句对null的处理尤其小心,这个null处理的知识点我看了好几次,但是很容易再次犯错,这次记录一个点, 因为这个错误是我看一个帖子看到的错误的 ...
- SQL中IN与EXISTS的比较
为什么80%的码农都做不了架构师?>>> 由于要使用 in,后来在网上找找了,发现有如下文章,大家共享一下.一起进步啦. 使用in的话,如果存在索引,和使用 join 性能差别 ...
- Sql语句中IN和exists的区别及应用
表展示 首先,查询中涉及到的两个表,一个user和一个order表,具体表的内容如下: user表: order表: in 确定给定的值是否与子查询或列表中的值相匹配.in在查询的时候,首先查询子查询 ...
- SQL中如何使用EXISTS替代IN
我们在程序中一般在做SQL优化的时候讲究使用EXISTS带替代IN的做法,理由是EXISTS执行效率要比IN高. 之前我一直挺懵懂的一件事情是如何使用EXISTS来替换IN呢,二者表示的意义又是什么呢 ...
最新文章
- iOS自动签名打包(xcodebuild)----常用
- python 图像降噪
- python中s和t_Python中关于序列化的讨论,以及dump、dumps和load、loads区别的对比
- Linux字符驱动开发学习总结
- 一文攻破结构体-C语言
- cesium 修改 鼠标 样式
- 04737 c++ 自学考试2019版 第二章课后程序设计题 2
- 安卓开发——JNI——回调java中的方法
- Win8 开发者训练营第一天的过程,感受和收获 :D
- linux tick异常变化,linux tickGet()
- ireport导出pdf后中文字符全部不显示(已解决)
- CSS样式表操作及选择器定义
- 抖音短视频去水印网址 视频消重后,火山还是鉴别出来了
- 梁德伟-唯品会物流信息部技术部应用架构实践总结
- jasper ireport
- 从影片《点球成金》看大数据如何创造商业奇迹!
- 计数排序 | Counting Sort
- TREC之使用terrier进行信息检索
- Google 内购 - Android
- Unity TouchScript大屏