子查询比较简单,我们还是通过案例引入。
有时候我们查询的时候,需要用到的不止一个表的数据,比如下面的场景:
查询名字叫李晓红同学的班主任姓名
我们提供三个表的基础信息如下:
从三张表的结构,我们不难看出,想要根据student_name找到teacher_name,是这样一条链路:
很显然,我们不能只查询一个表就得到想要的结果,我们需要多写一条查询,将其结果作为另外一条查询的条件,这就是一种嵌套的结构,而在mysql中,是允许这种sql构建方式的,所以我们最终的sql就是:
sql
SELECT
teacher_name
FROM
teachers
WHERE
teacher_id = (
SELECT
head_teacher_id
FROM
classes
WHERE
class_id = (
SELECT
class_id
FROM
students
WHERE
student_name = '李晓红'
)
);

其实子查询就是完整的sql语句,查询结果可以用于:
- 用查询的特定值作为过滤条件
- 作为过滤范围
- 作为计算字段
用法非常多,就看自己的想象力了