子查询

子查询:sub query,查询是在某个查询结果之上进行的,一条select语句内部包含了另外一条select语句。

行子查询

行子查询,返回的结果可以使一行多列或者多行多列。

需求:查询学生表中,年龄最大且身高最高的学生。

思路:

  • 先确定数据源,学生表。

    • select * from student where age = ? and height = ?;
  • 然后确定最大年龄和最大身高。
    • select max(age), max(height) from student;

执行如下 SQL 语句,进行测试:

-- 列子查询
select * from student where
-- 其中,(age, height) 称之为行元素
(age, height) = (select max(age), max(height) from student);
  • 1
  • 2
  • 3
  • 4

表子查询

表子查询,返回的结果是多行多列二维表(将子查询的结果当做二维表来使用),实际上,任何查询返回的结果都可以称之为二维表。

需求:找出每个班身高最高的学生。

思路:

  • 先确定数据源,将学生按身高进行降序排序。

    • select * from student order by height desc;
  • 从每个班级选出第一个学生。
    • select * from student group by c_id;

在这里,我们可能会有些疑问:为什么要将学生表降序排序?为什么从每个班级选出第一个学生就可以?这是因为group by(分组)只会取表中分组字段的第一条记录,而当我们将学生表按身高降序排序时,(每组)身高最高的学生就会出现在第一位。

执行如下 SQL 语句,进行测试:

-- 表子查询
select * from
-- 关键字 from 后面接表名
(select * from student order by height desc) as student
-- 按 c_id 进行分组
group by c_id;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

由上面的 SQL 语句可知,表子查询也是from子查询,即有select语句位于from之后。

exists子查询

exists:表示是否存在的意思,因此exists子查询就是用来判断某些条件是否满足(跨表),exists是接在where之后,其返回的结果为10,满足条件为1,反之为0.

需求:在班级存在的前提下,查询所有的学生。

思路:

  • 先确定数据源。

    • select * from student where ?;
  • 然后确定条件是否满足。
    • exists(select * from class);

执行如下 SQL 语句,进行测试:

-- exists 子查询
select * from student where
exists(select * from class);-- 添加限定条件,满足条件
select * from student where
exists(select * from class where id = 3);-- 添加限定条件,不满足条件
select * from student where
exists(select * from class where id = 100);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

至此,我们已经将子查询学习完啦!也许大家还会有些疑惑,那就是到底在什么时候用什么子查询?对于这个问题,我们不用过于纠结,因为这根本就是我们要用什么子查询的问题,而是根据实际需求,我们将查询返回的结果按形式命名的称呼而已。


查询class表:

查询student表:


温馨提示:符号[]括起来的内容,表示可选项;符号+,则表示连接的意思。

史上最简单的 MySQL 教程(三十二)「子查询(下)」相关推荐

  1. 史上最简单的 MySQL 教程(十二)「列属性 之 唯一键」

    史上最简单的 MySQL 教程(十二)「列属性 之 唯一键」 唯一键 唯一键:每张表往往有多个字段需要具有唯一性,数据不能重复,但是在每张表中,只能有一个主键,因此唯一键就是用来解决表中多个字段需要具 ...

  2. 史上最简单的 MySQL 教程(十四)「列属性 之 主键」

    主键 主键:primary key,表中主要的键,每张表只能有一个字段(复合主键,可以多个字段)使用此属性,用来唯一的约束该字段里面的数据,不能重复. 增加主键 在 SQL 操作中,有 3 种方法可以 ...

  3. 史上最简单的 MySQL 教程(五)「SQL 基本操作 之 表操作」

    温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋Star.Fork,纠错. SQL 基本操作 基本操作:CURD,即增删改查. 根据操作对象的不同 ...

  4. 史上最简单的 MySQL 教程(六)「SQL 基本操作 之 数据操作」

    SQL 基本操作 基本操作:CURD,即增删改查. 根据操作对象的不同,咱们可以将 SQL 的基本操作分为三类,分别为:库操作.表(字段)操作和数据操作. 数据操作 1 新增数据 对于数据的新增操作, ...

  5. 史上最简单的SpringCloud教程 | 第十二篇: 断路器监控(Hystrix Dashboard)

    转:https://blog.csdn.net/forezp/article/details/70217283 在我的第四篇文章断路器(https://blog.csdn.net/forezp/art ...

  6. 史上最简单的 MySQL 教程(二)「关系型数据库」

    关系型数据库 1 定义 关系型数据库,是一种建立在关系模型(数学模型)上的数据库. 至于关系模型,则是一种所谓建立在关系上的模型,其包含三个方面,分别为: 数据结构:数据存储的形式,二维表(行和列): ...

  7. mysql交叉查询教程_史上最简单的 MySQL 教程(二十六)「连接查询(上)」

    连接查询连接查询:将多张表(大于等于 2 张表)按照某个指定的条件进行数据的拼接,其最终结果记录数可能有变化,但字段数一定会增加. 连接查询的意义:在用户查询数据的时候,需要显示的数据来自多张表. 连 ...

  8. 史上最简单的 MySQL 教程

    史上最简单的 MySQL 教程 数据库是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变 ...

  9. 史上最简单的SpringCloud教程 | 第十篇: 高可用的服务注册中心

    转自:https://blog.csdn.net/forezp/article/details/81041101 文章 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eu ...

  10. 史上最简单的SpringCloud教程 | 第十篇: 高可用的服务注册中心(Finchley版本)

    转载请标明出处: http://blog.csdn.net/forezp/article/details/81041101 本文出自方志朋的博客 个人博客纯净版:https://www.fangzhi ...

最新文章

  1. 《敏捷开发绩效管理》扩展阅读(敏捷开发绩效管理,敏捷团队绩效管理)
  2. mysql binlog 恢复 表_MySQL通过Binlog恢复删除的表
  3. php header
  4. 12 种经典亿级流量架构之资源隔离思想与方法论
  5. ReportViewer教程(15)-矩阵报表-4
  6. Express+Socket.IO 实现简易聊天室
  7. 《图谋职场——最经济的图形沟通》 一种能提高职场竞争力的沟通能力
  8. IV.Indexes(索引)
  9. 总线式布线、差分走线等布线方法
  10. 六年级计算机学习,小学六年级计算机学习教案(24页)-原创力文档
  11. 解决面部毛孔粗大的7个小窍门 - 健康程序员,至尚生活!
  12. 知行合一ArduPilot | ArduPilot系统框架简述
  13. Android 快速集成阿里云OSS服务2020
  14. linux查看串口信息tty*
  15. 医疗器械分销系统开发|分销商是怎么招募的?
  16. 斗鱼直播Android开发二面被刷,跳槽薪资翻倍
  17. 【CYH-02】NOIp考砸后虐题赛:数学:题解
  18. YOLOv5/v7 更换骨干网络之 SwinTransformer
  19. 查域名历史建站时间的方法分享(查域名历史 域名建站时间)
  20. 【SA系列】解决方案架构师专家岗位招聘参考标准

热门文章

  1. 贝叶斯估计的理解及例子
  2. MySql之length函数
  3. 虚幻蓝图节点 set Global Time Dilation
  4. 设计模式之——封装、继承、多态
  5. ElementUI MessageBox 弹框
  6. 我把毕业设计命名成“垃圾”发给了导师...
  7. LeetCode 51 52.N皇后
  8. linux ssh连接交换机_使用SSH登录交换机(RSA方式)
  9. 新生儿护理,新妈妈的第一场“高考”
  10. Python 中的Sympy详细介绍