温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

什么是数据库嵌套查询

发布时间:2026-09-02 08:24:57 来源:亿速云 阅读:93 作者:小樊 栏目:数据库

数据库嵌套查询(Nested Query),也常称为子查询(Subquery),是指在一个 SQL 查询语句中,嵌套了另一个查询语句。被嵌套的查询先执行,其结果作为外层查询的条件或数据来源。


一、基本结构

SELECTFROMWHERE 列 运算符 (SELECTFROM 另一表 WHERE 条件);
  • 外层查询:主查询
  • 内部查询:子查询(嵌套查询)

二、常见类型

1. WHERE 中的嵌套查询(最常用)

根据子查询结果做条件判断。

例:查询成绩大于平均分的学生

SELECT name
FROM student
WHERE score > (
    SELECT AVG(score)
    FROM student
);

2. IN / NOT IN 子查询

子查询返回多个值。

例:查询选修了“数学”的学生

SELECT name
FROM student
WHERE id IN (
    SELECT student_id
    FROM score
    WHERE course = '数学'
);

3. EXISTS / NOT EXISTS

判断子查询是否返回结果(注重“存在性”)。

例:查询有选课记录的学生

SELECT name
FROM student s
WHERE EXISTS (
    SELECT 1
    FROM score sc
    WHERE sc.student_id = s.id
);

4. FROM 中的嵌套查询(派生表)

子查询作为“临时表”使用。

例:查询每个班级的平均分

SELECT class, avg_score
FROM (
    SELECT class, AVG(score) AS avg_score
    FROM student
    GROUP BY class
) t;

5. SELECT 中的嵌套查询

子查询作为一列输出。

例:显示每个学生及其班级人数

SELECT name,
       (SELECT COUNT(*) 
        FROM student s2 
        WHERE s2.class = s1.class) AS class_count
FROM student s1;

三、执行顺序(重要)

  1. 先执行子查询
  2. 再将结果用于主查询
  3. 某些数据库会优化为 JOIN,但逻辑上仍是“先内后外”

四、嵌套查询 vs 连接查询(JOIN)

对比项 嵌套查询 JOIN
可读性 有时更直观 复杂查询更清晰
性能 可能较慢 通常更优
适用 存在性、聚合判断 多表关联

五、小结

  • 嵌套查询 = 查询里套查询
  • 常用于:条件过滤、存在判断、聚合比较
  • 写不清时,可先写子查询,再写外层

如果你愿意,我也可以用具体表结构 + 示例对比 JOIN 写法来帮你更直观地理解。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI