第九天:子查询

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

子查询分类
子查询有两种分类方式: 按位置分类; 按结果分类

按位置分类: 子查询(select语句)在外部查询(select语句)中出现的位置
From子查询: 子查询跟在from之后
Where子查询: 子查询出现where条件中
Exists子查询: 子查询出现在exists里面

按结果分类: 根据子查询得到的数据进行分类(理论上讲任何一个查询得到的结果都可以理解为二维表)
标量子查询: 子查询得到的结果是一行一列
列子查询: 子查询得到的结果是一列多行
行子查询: 子查询得到的结果是多列一行(多行多列)
上面几个出现的位置都是在where之后
表子查询: 子查询得到的结果是多行多列(出现的位置是在from之后)

标量子查询:
需求: 知道班级名字为PHP0710,想获取该班的所有学生.

  1. 确定数据源: 获取所有的学生
    Select * from my_student where id = ?;
  2. 获取班级ID: 可以通过班级名字确定
    Select id from my_class where name = ‘PHP0710’; – id一定只有一个值(一行一列)

标量子查询实现
在这里插入图片描述
列子查询
需求: 查询所有在读班级的学生(班级表中存在的班级)

  1. 确定数据源: 学生
    Select * from my_student where id in (?);
  2. 确定有效班级的id: 所有班级id
    Select id from my_class;

列子查询实现:
在这里插入图片描述
列子查询返回的结果会比较: 一列多行, 需要使用in作为条件匹配: 其实在mysql中有还有几个类似的条件: all, some, any

=Any ==== in; – 其中一个即可
Any ====== some; – any跟some是一样
=all ==== 为全部

肯定结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
否定结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
行子查询
行子查询: 返回的结果可以是多行多列(一行多列)

需求: 要求查询整个学生中,年龄最大且身高是最高的学生.
在这里插入图片描述
表子查询
表子查询: 子查询返回的结果是多行多列的二维表: 子查询返回的结果是当做二维表来使用

需求: 找出每一个班最高的一个学生.

  1. 确定数据源: 先将学生按照身高进行降序排序
    Select * from my_student order by height desc;
  2. 从每个班选出第一个学生
    Select * from my_student group by cid; – 每个班选出第一个学生

表子查询: from子查询: 得到的结果作为from的数据源
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值