1.3 子查询
语法
1 | 语法:select 语句 where 条件 (select … from 表) |
1、查找笔试80分的学生
1 | mysql> select * from stuinfo where stuno=(select stuno from stumarks where writtenexam=80); |
2、查找笔试最高分的学生
1 | # 方法一: |
1 | 脚下留心:上面的例题,子查询只能返回一个值。如果子查询返回多个值就不能用“=”了,需要用 in |
1.3.2 in|not in子查询
用于子查询的返回结果多个值。
1、查找笔试成绩及格的同学
1 | mysql> select * from stuinfo where stuno in (select stuno from stumarks where writtenexam>=60); |
2、查询不及格的同学
1 | mysql> select * from stuinfo where stuno in (select stuno from stumarks where writtenexam<=60); |
3、查询没有通过的同学(不及格,缺考)
1 | mysql> select * from stuinfo where stuno not in (select stuno from stumarks where writtenexam>=60); |
1.3.3 exists和not exists
1、 如果有人笔试超过80分就显示所有的学生
1 | mysql> select * from stuinfo where exists (select * from stumarks where writtenexam>=80); |
2、 如果没有人超过80分就显示所有的学生
1 | mysql> select * from stuinfo where not exists (select * from stumarks where writtenexam>=80); |
1.3.4 子查询分类
1、标量子查询:子查询返回的结果就一个
2、列子查询:子查询返回的结果是一个列表
3、行子查询:子查询返回的结果是一行
例题:查询成绩最高的男生和女生
1 | mysql> select stuname,stusex,ch from stu where (stusex,ch) in (select stusex,max(ch) from stu group by stusex); |
4、表子查询:子查询返回的结果当成一个表
例题:查询成绩最高的男生和女生
1 | mysql> select stuname,stusex,ch from (select * from stu order by ch desc) as t group by stusex; |
1 | 脚下留心:from后面是一个表,如果子查询的结果当成表来看,必须将子查询的结果取别名。 |