in和exists的区别

新建两个表
user表

account表

in

SELECT * FROM  user u where u.id in (select user_id from account )

查询结果

查询过程:

  1. 先查子查询,即执行select user_id from account
  2. 查父查询,即执行SELECT * FROM user u
  3. 两个查询形成笛卡尔积,按照条件u.id = user_id进行筛选,也就是对于父查询的每一条记录,如果其中的u.id在子查询的结果集合中,则输出这条记录。

exists

select * from user u where exists(select * from account a where u.id = a.id )

查询结果

结果与in相同

查询过程

  1. 先进行父查询,即select * from user u
  2. 对于父表的每一条记录都进行子查询,即select * from account a where u.id = a.id 对每一次子查询都进行判断,如果查出结果,返回true,输出父查询的语句。

注意:

这里的子查询select和from之间可以是任意字段,因为exists返回的是true和false,不是结果集。只是证明它存在。

总结

in
如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in
exists
如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists

举例说明SQL中 in和exists的区别相关推荐

  1. sql中exits和in的区别

    sql中exits和in的区别 转:http://hi.baidu.com/delphi_relive/blog/item/d7c0034a49c4932208f7ef21.html in 和 exi ...

  2. MySQL中In与Exists的区别

    MySQL中In与Exists的区别 1 例子 2 EXISTS和IN的介绍 2.1 exists 2.2 in 2.3 使用上的区别 3 EXISTS和IN的性能分析 4 总结 1 例子 有两个表需 ...

  3. SQL中where与having的区别

    SQL中where与having的区别 目录 SQL中where与having的区别 创建表 插入数据 进行聚合操作 # WHERE是在聚合之前进行数据行的过滤而HAVING实在聚合之后进行新数据的过 ...

  4. SQL中modify和alter用法区别

    SQL中modify和alter用法区别 1. 所属能力大小不同: modify:只能用于修改字段的属性 例如:把age字段变为非空(针对persons表中的age这一个字段进行修改) ALTER T ...

  5. 数据库查询语句SQL中like、%、-的区别

    数据库查询语句SQL中like.%.-的区别 数据库查询语句SQL中like.%.-的区别 %百分号通配符:表示任何字符出现任意次数(可以是0次) SQL 语句选取 name 以字母 "k& ...

  6. sql中=null和is null区别

    sql中=null和is null区别 前言 关于sql语句对null的处理尤其小心,这个null处理的知识点我看了好几次,但是很容易再次犯错,这次记录一个点, 因为这个错误是我看一个帖子看到的错误的 ...

  7. SQL中IN与EXISTS的比较

    为什么80%的码农都做不了架构师?>>>    由于要使用 in,后来在网上找找了,发现有如下文章,大家共享一下.一起进步啦. 使用in的话,如果存在索引,和使用 join 性能差别 ...

  8. Sql语句中IN和exists的区别及应用

    表展示 首先,查询中涉及到的两个表,一个user和一个order表,具体表的内容如下: user表: order表: in 确定给定的值是否与子查询或列表中的值相匹配.in在查询的时候,首先查询子查询 ...

  9. SQL中如何使用EXISTS替代IN

    我们在程序中一般在做SQL优化的时候讲究使用EXISTS带替代IN的做法,理由是EXISTS执行效率要比IN高. 之前我一直挺懵懂的一件事情是如何使用EXISTS来替换IN呢,二者表示的意义又是什么呢 ...

最新文章

  1. iOS自动签名打包(xcodebuild)----常用
  2. python 图像降噪
  3. python中s和t_Python中关于序列化的讨论,以及dump、dumps和load、loads区别的对比
  4. Linux字符驱动开发学习总结
  5. 一文攻破结构体-C语言
  6. cesium 修改 鼠标 样式
  7. 04737 c++ 自学考试2019版 第二章课后程序设计题 2
  8. 安卓开发——JNI——回调java中的方法
  9. Win8 开发者训练营第一天的过程,感受和收获 :D
  10. linux tick异常变化,linux tickGet()
  11. ireport导出pdf后中文字符全部不显示(已解决)
  12. CSS样式表操作及选择器定义
  13. 抖音短视频去水印网址 视频消重后,火山还是鉴别出来了
  14. 梁德伟-唯品会物流信息部技术部应用架构实践总结
  15. jasper ireport
  16. 从影片《点球成金》看大数据如何创造商业奇迹!
  17. 计数排序 | Counting Sort
  18. TREC之使用terrier进行信息检索
  19. Google 内购 - Android
  20. Unity TouchScript大屏

热门文章

  1. Linux学习总结(10)——Linux查看CPU和内存使用情况
  2. Android X轴Y轴Z轴旋转
  3. 阿里云CDN和全站加速的区别
  4. go html桌面,Go语言:开发GUI桌面应用(andlabs/ui)
  5. Win10应用程序无法正常启动0xc0000018错误解决办法
  6. 门磁传感器到底有什么作用?智汀门磁传感器的原理和使用方法
  7. TC基础使用指南(基于xbeta的TC配置文件)
  8. DRL前沿之:End to End Learning for Self-Driving Cars
  9. javaScript 美元符號$
  10. 深入理解计算机系统——知识总结(二)