子查询语句
在一个select语句中嵌入了另一个select语句,那么被嵌入的select语句叫做子查询语句
主查询语句
第一个select语句
主查询和子查询的关系
子查询的分类
1、标量子查询(子查询语句返回的是一个值)
查询students表中大于平均年龄的学生信息
- 查询班级学生平均年龄
- 查询大于平均年龄的学生
子查询:select语句中嵌套select语句
select * from students where height 主查询
select avg(height) from students 子查询身高平均值
将两句合并,并给子查询加小括号,提高优先级
select * from students where age > (select avg(age)from students);
2、列级子查询(子查询语句返回的结果为单列)
查询有学生的班级有哪些
- 找出学生表中所有的班级 id
- 找出班级表中对应的名字
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);
总结
子查询的完整语句
执行顺序