子查询:subquery,一天查询语句在另外一条查询语句当中,那么该查询语句就是子查询。
一条select查询语句得到的结果可能有那些?
1. 一张表
2. 一行
3. 一个列
4. 一个字段
基于查询得到的结果,可以对子查询进行以下分类
1. 标量子查询:子查询返回的结果是一个字段单元
2. 列子查询:子查询返回的结果是一个字段,但是有多个值
3. 行子查询:子查询返回的结果是一行记录(一条记录:大于一个字段)
4. 表子查询:返回的结果是一个二维表(多行多列)
标量子查询
通常,标量子查询是用于作为整条查询语句条件部分中的比较运算
列子查询
In / union
列子查询也是用于主查询的查询条件
行子查询
也是用于主查询的条件判断
创建一个学生表和班级表
需求:要求查询找出年龄最大,同时身高最高的学生。
思路
两条子查询
1. 找出最大的年龄和最高的身高
2. 查询条件中比较最大的值
行子查询需要构造行元素,通过使用括号,将多个字段放到一起,形成“行“,再使用行与子查询得到的”行”进行比较。
表子查询
用于作为数据源,出现在from之后
需求:获取每个班级中身高最高的一个学生
当一个子查询作为数据源的时候,必须要将该数据源命名成表的形式(一个名字),所以表子查询得到的结果必须使用别名
表子查询
通过子查询出现的位置,也可以对子查询进行分类
1. From子查询:表子查询
2. Where子查询:变量,行,列子查询
3. Exists子查询:用来判断查询条件,exists返回的结果是一个布尔值
Exists子查询适用于:主查询查询的结果非常大,但是又特别依赖某个条件(主查询要么获取全部要么一个都不要)