表展示

首先,查询中涉及到的两个表,一个user和一个order表,具体表的内容如下:

user表:

order表:

in

  确定给定的值是否与子查询或列表中的值相匹配。in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。所以相对内表比较小的时候,in的速度较快。

具体sql语句如下:

 SELECT*FROM`user`WHERE`user`.id IN (SELECT`order`.user_idFROM`order`)

这条语句很简单,通过子查询查到的user_id 的数据,去匹配user表中的id然后得到结果。该语句执行结果如下:

它的执行流程是什么样子的呢?让我们一起来看一下。

首先,在数据库内部,查询子查询,执行如下代码:

SELECT
`order`.user_id
FROM
`order`

执行完毕后,得到结果如下:

此时,将查询到的结果和原有的user表做一个笛卡尔积,结果如下:

此时,再根据我们的user.id IN order.user_id的条件,将结果进行筛选(既比较id列和user_id 列的值是否相等,将不相等的删除)。最后,得到两条符合条件的数据。

exists

指定一个子查询,检测行的存在。遍历循环外表,然后看外表中的记录有没有和内表的数据一样的。匹配上就将结果放入结果集中。

具体sql语句如下:

SELECT`user`.*FROM`user`WHEREEXISTS (SELECT`order`.user_idFROM`order`WHERE`user`.id = `order`.user_id)

这条sql语句的执行结果和上面的in的执行结果是一样的。

但是,不一样的是它们的执行流程完全不一样:

使用exists关键字进行查询的时候,首先,我们先查询的不是子查询的内容,而是查我们的主查询的表,也就是说,我们先执行的sql语句是:

SELECT `user`.* FROM `user`

得到的结果如下:

然后,根据表的每一条记录,执行以下语句,依次去判断where后面的条件是否成立:

EXISTS (
SELECT
`order`.user_id
FROM
`order`
WHERE
`user`.id = `order`.user_id
)

如果成立则返回true不成立则返回false。如果返回的是true的话,则该行结果保留,如果返回的是false的话,则删除该行,最后将得到的结果返回。

区别及应用场景

  in 和 exists的区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in, 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了 ,另外IN时不对NULL进行处理。

  in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。

not in 和not exists

  如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。

mysql exist和in的区别相关推荐

  1. mysql社区版与cluster 区别_MySQL版本Enterprise/Community/Cluster等版本的区别

    MySQL分为多种版本如Community.Enterprise.Cluster和Workbench等,MySQL不同版本有什么区别?LAMPLNMP分享: MySQL版本区别 ● MySQL Com ...

  2. SQL Server 和 MySql 语法和关键字的区别

    (1)    MySQL的ifnull()函数对应sql的isnull()函数; (2)    mysql的存储过程中变量的定义去掉@; (3)    mysql的每句结束要用";" ...

  3. php里面sql是什么意思,MySQL和SQL是什么?MySQL和SQL之间的区别有哪些

    MySQL和SQL之间的区别有哪些?很多PHP的初学者,对MySQL,MyAdmin和SQL有什么区别并不是很清楚?下面 第一PHP社区 就带领大家来学习一下MySQL和SQL之间的区别.[推荐阅读: ...

  4. oracle数据库跟mysql的区别_关于Oracle数据库与MySQL数据库的几点区别

    Oracle数据库与MySQL数据库的区别是本文我们主要要介绍的内容,接下来我们就开始介绍这部分内容,希望能够对您有所帮助. Oracle与MySQL的区别: 1.在Oracle中用select * ...

  5. MySQL数据库引擎介绍、区别、创建和性能测试的深入分析

    深入理解MySQL的数据库引擎的类型 作者: 字体:[增加 减小] 类型:转载 本篇文章是对MySQL的数据库引擎的类型进行了详细的分析介绍,需要的朋友参考下   你能用的数据库引擎取决于mysql在 ...

  6. MySQL - change 和 modify 的区别

    表描述 MySQL 中 change 和 modify 区别 更改列名 change: alter table 表名 change 旧列名 新列名 类型 只更改列属性 change: alter ta ...

  7. SQL、MySQL与HiveSQL的使用区别ing

    SQL.MySQL与HiveSQL的使用区别 1 查询结果前10条数据 2 返回是周几的函数 3 查看表结构数量 4 获取当前时间 5 从数据库定位到某张表 6 分号字符: 7 IS [NOT] NU ...

  8. mysql 、oracle存储过程语法区别

    mysql .oracle存储过程语法区别 1.  条件语句:mysql使用elseif关键字,oracle是elsif关键字: oracle: if表达式 then 表达式: elsif 表达式: ...

  9. MySQL与Oracle的应用区别

    关系型数据库(Oracle与MySQL优缺点.使用区别) MySQL的特点 1.性能卓越,服务稳定,很少出现异常宕机: 2.开放源代码无版本制约,自主性及使用成本低: 3.历史悠久,社区和用户非常活跃 ...

  10. mysql社区版与cluster 区别_MySQL版本Enterprise/Community/Cluster有何区别

    MySQL版本Enterprise/Community/Cluster有何区别 发布时间:2020-05-28 14:23:34 来源:PHP中文网 阅读:278 作者:三月 下面讲讲关于MySQL版 ...

最新文章

  1. SQL优化的一些知识
  2. 高级指令——kill指令、ifconfig指令、reboot指令、shutdown指令、uptime指令、uname指令
  3. Spring配置文件中bean标签的scope属性
  4. php推送示例wordpress,给WordPress的编辑后台添加提示框的代码实例分享
  5. 渭南师范计算机科学与技术,渭南师范学院计算机科学与技术专业2016年在陕西理科高考录取最低分数线...
  6. 2017 年度编程语言榜,Java 最流行、JavaScript 最没价值?
  7. php中文分词类 关键词提取,php如何使用PHPAnalysis提取关键字中文分词
  8. colorWithAlphaComponent
  9. foxmail邮件加载失败重试_Foxmail提示错误的解决方案
  10. 【Chromium中文文档】线程
  11. 经典排序算法(十二)--地精排序Gnome Sort
  12. mvc+EF实现简单的登陆功能
  13. java读取资源文件(Properties)
  14. jvm 字节码jclasslib解读
  15. 互联网晚报 | 9月1日 星期四 |​ 刘畊宏带货假燕窝公司已被吊销;比亚迪回应巴菲特减持;华为打车将全国扩张...
  16. 禅道和xxd(喧喧)两台主机服务器采坑记!
  17. [SHELL]: ln 命令详解
  18. Linux通过wine运行QQ,Ubuntu安装wine运行QQ和微信
  19. 怎么将sql文件加载到数据库
  20. Android插件化动态加载apk

热门文章

  1. 阿里2018校招编程题
  2. 线程中yield的用法
  3. SpringMVC——架构,搭建,SSM搭建,POST请求乱码问题,参数转换器
  4. 201709020工作日记--synchronized、ReentrantLock、读写锁
  5. Git:常用命令记录
  6. (转载)Android开发在路上:少去踩坑,多走捷径
  7. Silverlight 2初尝及我的例子:Fanfou.com客户端——EatSilverlight
  8. [Reference][Castle AR] 1. Starter
  9. Python 用下划线作为变量前缀和后缀指定特殊变量
  10. JMS学习十一(ActiveMQ Consumer高级特性之独有消费者(Exclusive Consumer))