外观
什么是子查询
子查询是指在一个查询语句中嵌套另一个查询语句的查询。子查询可以出现在 SELECT
、INSERT
、UPDATE
、DELETE
语句中,也可以出现在 WHERE
、HAVING
或 FROM
子句中。子查询的结果可以是一个值、一列值或多行多列值。
子查询的基本语法结构如下:内层查询(子查询)首先执行,然后将结果传递给外层查询(主查询)使用
SELECT xxx
FROM xxx
WHERE xxx = (SELECT xxx FROM xxx WHERE xxx);
子查询可以根据返回的结果和执行方式进行分类:
1.单行子查询:返回一条记录的子查询,通常与单行比较操作符(如 =
、>
、<
等)一起使用。
查询分数大于某个特定学生分数的学生信息:
SELECT s1.*
FROM students s1
WHERE s1.score > (
SELECT s2.score
FROM students s2
WHERE s2.id = 5
);
2.多行子查询:返回多条记录的子查询,通常与多行比较操作符(如 IN
、ANY
、ALL
等)一起使用。
查询属于特定班级的所有学生:
SELECT s.*
FROM students s
WHERE s.class_id IN (
SELECT c.class_id
FROM classes c
WHERE c.class_name = 'Class A'
);
3.相关子查询:子查询的执行依赖于外部查询的结果,每次外部查询执行时,子查询都会重新计算。
查询分数大于本班级平均分数的学生信息:
SELECT s1.*
FROM students s1
WHERE s1.score > (
SELECT AVG(s2.score)
FROM students s2
WHERE s2.class_id = s1.class_id
);
子查询中的注意事项:
1.子查询必须包含在括号内。
2.子查询的结果必须与外层查询的使用场景相匹配。
3.子查询可以嵌套使用,但过多的嵌套可能会影响查询性能。