数据库嵌套查询(Nested Query),也常称为子查询(Subquery),是指在一个 SQL 查询语句中,嵌套了另一个查询语句。被嵌套的查询先执行,其结果作为外层查询的条件或数据来源。
SELECT 列
FROM 表
WHERE 列 运算符 (SELECT 列 FROM 另一表 WHERE 条件);
根据子查询结果做条件判断。
例:查询成绩大于平均分的学生
SELECT name
FROM student
WHERE score > (
SELECT AVG(score)
FROM student
);
子查询返回多个值。
例:查询选修了“数学”的学生
SELECT name
FROM student
WHERE id IN (
SELECT student_id
FROM score
WHERE course = '数学'
);
判断子查询是否返回结果(注重“存在性”)。
例:查询有选课记录的学生
SELECT name
FROM student s
WHERE EXISTS (
SELECT 1
FROM score sc
WHERE sc.student_id = s.id
);
子查询作为“临时表”使用。
例:查询每个班级的平均分
SELECT class, avg_score
FROM (
SELECT class, AVG(score) AS avg_score
FROM student
GROUP BY class
) t;
子查询作为一列输出。
例:显示每个学生及其班级人数
SELECT name,
(SELECT COUNT(*)
FROM student s2
WHERE s2.class = s1.class) AS class_count
FROM student s1;
| 对比项 | 嵌套查询 | JOIN |
|---|---|---|
| 可读性 | 有时更直观 | 复杂查询更清晰 |
| 性能 | 可能较慢 | 通常更优 |
| 适用 | 存在性、聚合判断 | 多表关联 |
如果你愿意,我也可以用具体表结构 + 示例或对比 JOIN 写法来帮你更直观地理解。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。