温馨提示×

温馨提示×

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

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

Subquery子查询能嵌套吗

发布时间:2026-09-05 10:19:15 来源:亿速云 阅读:90 作者:小樊 栏目:数据库

可以的,SQL 中的子查询(Subquery)是可以嵌套的,也就是“子查询里再写子查询”。

一、什么是嵌套子查询

嵌套子查询指的是:一个子查询的结果,作为另一个子查询的输入或条件,可以多层嵌套。

SELECT *
FROM employees
WHERE department_id = (
    SELECT department_id
    FROM departments
    WHERE location_id = (
        SELECT location_id
        FROM locations
        WHERE city = 'Beijing'
    )
);

上面例子中:

  • 最内层子查询找 city = 'Beijing'location_id
  • 中间子查询用这个 location_iddepartment_id
  • 最外层查询用 department_id 查员工

二、常见嵌套形式

  1. WHERE 中嵌套
SELECT *
FROM t1
WHERE col1 = (SELECT col2 FROM t2 WHERE col3 = (SELECT col4 FROM t3));
  1. SELECT 中嵌套
SELECT 
    id,
    (SELECT COUNT(*) FROM orders o WHERE o.user_id = u.id) AS order_count
FROM users u;
  1. FROM 中嵌套(派生表)
SELECT *
FROM (
    SELECT *
    FROM (
        SELECT * FROM sales
    ) t1
) t2;

三、注意事项

  • 可读性:嵌套层级过多会降低 SQL 可读性和维护性
  • 性能:深层嵌套可能导致执行计划复杂,性能下降
  • 可替代方案
    • JOIN
    • WITH(CTE,公共表表达式)
WITH loc AS (
    SELECT location_id FROM locations WHERE city = 'Beijing'
),
dept AS (
    SELECT department_id FROM departments WHERE location_id IN (SELECT location_id FROM loc)
)
SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM dept);

四、总结

✅ 子查询可以嵌套
⚠ 但不建议嵌套太深
✅ 复杂逻辑优先考虑 JOINCTE

如果你有具体 SQL 场景,我可以帮你改写或优化。

向AI问一下细节

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

AI