学生表:
01.png
班级表:
02.png
在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句
子查询分类
标量子查询: 子查询返回的结果是一个数据(一行一列)
列子查询: 返回的结果是一列(一列多行)
行子查询: 返回的结果是一行(一行多列)
1.标量子查询
查询年龄大于平均年龄的学生
select * from students where age > (select avg(age) from students);
2.列级子查询
查询还有学生在班的所有班级名字
select 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. 子查询和关联查询综合
1) 分别查看 男/女 最大年龄,最小年龄,平均年龄:
select gender,max(age),min(age),avg(age) from students group by gender having gender in ('男',"女");
2) 分别查看 男/女 最大年龄的人 具体的名字:
select students.name,students.gender,new_students.max_age from students inner join (
select gender,max(age) as max_age from students group by gender having in ('男','女')
) as new_students
on students.gender=new_students.gender and students.age=new_students.max_age;
08.png