MySQL数据表的子查询

子查询语句
在一个select语句中嵌入了另一个select语句,那么被嵌入的select语句叫做子查询语句
主查询语句
第一个select语句
主查询和子查询的关系


子查询的分类

1、标量子查询(子查询语句返回的是一个值)
查询students表中大于平均年龄的学生信息
  1. 查询班级学生平均年龄
  2. 查询大于平均年龄的学生
子查询:select语句中嵌套select语句
select * from students where height 主查询
select avg(height) from students 子查询身高平均值
将两句合并,并给子查询加小括号,提高优先级
select * from students where age > (select avg(age)from students);

2、列级子查询(子查询语句返回的结果为单列)
查询有学生的班级有哪些
  1. 找出学生表中所有的班级 id
  2. 找出班级表中对应的名字
select class_name from classes where id in (select cls_id from students);

3、行级子查询
查找班级年龄最大,身高最高的学生(两个条件同时出现在一个学生生身上)
  • 行元素: 将多个字段合成一个行元素,在行级子查询中会使用到行元素
select * from students where (height,age)=(select max(height),max(age) from students);

4、 表级子查询 (返回多行多列的结果集)
查询学生和学生所在的班级
select students.name,classes.class_name from students inner join classes on students.cls_id = classes.id;
↓ ↓ ↓ ↓ ↓ ↓ ↓
select students.name,classes.class_name from (多行多列的结果集)

子查询特定关键字:in、some、any、all
select class_name from classes where id in (select cls_id from students);
---any | some 比较运算符 类似in
select class_name from classes where id = any(select cls_id from students);

select class_name from classes where id = some(select cls_id from students);

---all 一般搭配 != <> 使用
作用类似于not in
select class_name from classes where id <> all(select cls_id from students);

总结
子查询的完整语句

执行顺序


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值