子查询
一个select中还包含另一个select,其中最里面的select语句称之为子查询
根据select出现的位置可以将子查询分为以下几类:
from子查询
where子查询
exists子查询
从select返回的结果,那么子查询又可以分为:
标量子查询
查询的结果只有一个值。
示例:
需求:查询zhangsan所在的教室
思路:
首先,先写最终想得到查询==》教室
select room from class ......
再行,条件==》查询zhangsan
where id =(select c_id from stu where s_name='zhangsan')
列子查询
查询得到的结果,是一个一列多行的数据。
需求:
查询班级为php的所有的学生
select * from stu where c_id =(select id from class where c_name='php');
查询班级为php和ios的所有的学生
select * from stu where c_id in (select id from class where c_name = 'php' or c_name='ios');
示例:
行子查询
查询的结果是一行多列。
需求:查询学生表中,sex为1,age为最大的记录
select * from stu where (age,sex)=(select max(age),sex from stu where sex=1);
示例:
表子查询
结果是一个表,相当于一个数据源,数据源放到from后
需求:
查询每一个班级中年龄最大的学生。
示例:
exists子查询
exists相当于判断
需求:
查询php班级中有的学生