mysql中虽然有连接查询实现多表连接查询,但是连接查询的性能很差,因此便出现了子查询。

1、理论上,子查询可以出现在查询语句的任何位置,但实际应用中多出现在from后和where后。出现在from后的子查询结果通常是多行多列的,充当临时表;而出现在where后的子查询结果通常是单行单列,充当条件:


2、where后作为条件的子查询多与“=”、“!=”、“>”、“<”等比较运算符一起使用。结果虽然通常是单行单列,但是有的时候也会用单行多列,而且有的时候还会返回多行单列。如果是多行单列的情况,则多与in、any、all、exists结合使用:
in和not in:


其中in表示包含于后边子查询结果集里的任意一个,not in表示不包含于后边结果集里的任意一个。上图子查询的结果中,返回depart_id为1、2、4,因此第一个查询就会查出emp中所有depart_id是1或2或4的,第二个就会查出既不是1也不是2也不是4的。

any:


=any的用法和in的效果是一样的;>any是说要大于子查询结果集里的任意一个就可以,简单理解就是只要大于结果集中最小的那个就可以;<any就是要小于子查询结果集里任意一个就可以,简单理解就是只要小于最大的一个就可以。因此这里>any是只要大于1就行,而<any则只要小于4就行。

all:


>all就是说要大于子查询结果集里所有的,简单理解就是要比最大的那个还大;<all就是要小于结果集里所有的,简单理解就是要比最小的还小。因此上边的第一个查询就是要大于4,第二个就是要小于1。

exists:


exists和not exists只关心后边的子查询是否有结果,而不关心子查询的结果是什么;对于exists,如果后边的子查询有结果,那么它的值就是true,反之如果没有查到结果,则为false,而not exists正好和这个情况相反,有值为false,无值为true。当他们的值为true时,前边查询到的结果成立,会被加入到主查询的结果集,否则不会被加入主查询的结果集。
在上便的查询中,查询语句会先从emp中查询一条数据,然后拿这条数据的depart_id和company中的depart_id比较,当存在两个id相同的数据时,就会有结果返回,然后最终返回6条数据,而第二个查询一样的道理,当不存在两个id相同的数据时,主查询才有结果返回,只有一条数据。

Mysql学习总结(26)——MySQL子查询的更多相关文章

  1. 我的MYSQL学习心得(七) 查询

    我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  2. Database学习 - mysql 数据库 多表/复合/子 查询

    多表查询 多表查询,基本规则,通过两表有关联字段的进行条件匹配查询 内连接查询 方式一: SELECT 查看字段名[,查看字段名] FROM 一表名,二表名 WHERE 一/二表.字段 = 一/二表. ...

  3. mysql学习之路_联合查询与子查询

    联合查询 联合查询:将多次查询(多条select语句)在记录上进行拼接(字段不会增加). 语法:多条select语句构成,每条select语句获取的字段必须严格一致(但是字段类型无关). Select ...

  4. 《MySQL必知必会学习笔记》:子查询

    子查询 在開始了解子查询之前,首先做下准备工作,建立3个表, 一个是customers表,当中包含:客户名字.客户ID.客户Tel等. 一个是orders表,当中包含:订单号.客户ID.订单时间等. ...

  5. MYSQL初级学习笔记六:子查询!(视频序号:初级_42 | 43)

    知识点八:子查询(42) 什么是子查询: 子查询是将一个查询语句嵌套在另一个查询语句中.内层查询语句的查询结果,可以作为外层查询语句提供条件. 引发子查询的情况: 使用[NOT] IN 的子查询 -- ...

  6. MySQL全面瓦解11:子查询和组合查询

    概述 子查询是SQL查询中的重要一块,是我们基于多表之间进行数据聚合和判断的一种手段,使得我们的处理复杂数据更加的便捷,这一节我们主要来了解一下子查询. 先做一下数据准备,这边建立三张表:班级.学生. ...

  7. MYSQL优化派生表(子查询)在From语句中的

    Mysql 在5.6.3中,优化器更有效率地处理派生表(在from语句中的子查询): 优化器推迟物化子查询在from语句中的子查询,知道子查询的内容在查询正真执行需要时,才开始物化.这一举措提高了性能 ...

  8. MySQL 通过semi join 优化子查询

    半连接是MySQL 5.6.5引入的,多在子查询exists中使用,对外部row source的每个键值,查找到内部row source匹配的第一个键值后就返回,如果找到就不用再查找内部row sou ...

  9. mysql 在update中实现子查询的方式

    当使用mysql条件更新时--最先让人想到的写法 UPDATE buyer SET is_seller=1 WHERE uid IN (SELECT uid FROM seller) 此语句是错误的, ...

  10. MySQL学习笔记8——多表查询

    多表查询 多表查询 *合并结果集 *连接查询 *子查询 合并结果集 *要求被合并的表中,列的类型和列数相同(实际上是查询的结果集列类型和列数相同即可) *UNION,去除重复行 *UNION ALL, ...

随机推荐

  1. 【bzoj 1502】月下柠檬树

    月下柠檬树 题意 求n个圆与他们的公切线的定积分. 解法 求出圆的公切线就可以了. 特别坑的一点 : 最两端的圆,有可能会被其他的圆所包含,所以要重新求一下最左端与最右端. 比较坑的一点 : 精度要设 ...

  2. CF1042F Leaf Sets (贪心+树上构造)

    题目大意:给你一棵树,让你对叶节点分组,保证每组中,任意两个叶节点之间的距离不大于K,求最小的组数 手动yy的贪心竟然对的 对于每个节点,维护一个$ma[i]$,表示在$i$节点的子树内 未被分组的叶 ...

  3. NOIP2015 运输计划 (树上差分+二分答案)

    ---恢复内容开始--- 题目大意:给你一颗树,你可以把其中一条边的边权改成0,使给定的一些树链的权值和的最大值最小 把lenth定义为未修改边权时的答案 考虑二分答案,如果二分的答案成立,设修改成0 ...

  4. 递归树处理,配合vue的vueTreeselect组件使用

    在项目中经常会使用到tree,并且需要对递归树进行操作. 在vue项目中,使用vue-treeselect插件(https://vue-treeselect.js.org/) 使用中遇到的问题: 1. ...

  5. 如何让Jboss的debug在myeclise上运行

    1.在windows下运行jboss的debug.bat 看见监听的端口 2.打开myeclipse 点击选择 ①你要配置的名字(随意) ②myeclipse中选中该项目 ③jboss的启动的ip地址 ...

  6. C# .net IDE Rider入门

    话说史上最强IDE Visual Studio 所向披靡数十载尚无敌手,现在Intellij带着统一IDE界的目标来挑战VS的霸主地位.了解Rider后发现,哎哟亮点多多,还不错哦! Rider是一款 ...

  7. stl里面stack的注意事项

    1. pop是不返回元素的.因为不能返回引用,只能返回实例.而这个实例是在函数里面初始化的,所以必须在外面再赋值和初始化.而如果实例复制失败,会产生丢失. 2. 而top是可以返回引用的.实际上,返回 ...

  8. cocos2d-x 移植到android中编译的一些问题:fatal error: Box2D/Box2D.h: No such file or directory&quot;

    1.fatal error: Box2D/Box2D.h: No such file or directory" 须要加入box2d库的支持,改动android.mk文件,例如以下: 查看文 ...

  9. Android_通过Bugtags平台,方便測试人员提交bug及整个bug系统的管理

    Bugtags 是什么? Bugtags 是一款缺陷发现及管理工具. 当您的 App 集成了 Bugtags SDK 后,測试人员就可直接在 App 里所见即所得的提交 Bug. SDK 会自己主动截 ...

  10. hibernate之4.延迟载入

    延迟载入: 仅仅有当使用以实体对象的属性(除主键属性外)时,才会发送查询语句到数据库 get不支持延迟载入 @Test public void getTest(){ Session session=n ...