温馨提示×

温馨提示×

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

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

何时该用 Nested Query

发布时间:2026-09-22 17:25:04 来源:亿速云 阅读:82 作者:小樊 栏目:数据库

在数据库(尤其 SQL)里,Nested Query(嵌套查询 / 子查询)并不是“高级才用”,而是看语义是否天然分层。下面用「什么时候该用」来总结,配例子。


一、该用 Nested Query 的典型场景

1️⃣ 查询结果依赖“另一个查询的结果”

例:找出工资高于平均工资的员工

SELECT name
FROM employees
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
);

✅ 这里“平均值”必须先算,再比较
❌ 用 JOIN 反而别扭


2️⃣ 存在“是否存在 / 是否属于”的判断

例:有订单的客户

SELECT name
FROM customers
WHERE EXISTS (
    SELECT 1
    FROM orders
    WHERE orders.cust_id = customers.id
);

或“没有订单的客户”用 NOT EXISTS

✅ 语义清晰:

“只要存在就够,不关心具体值”


3️⃣ 集合关系(IN / NOT IN)

例:买过 iPhone 的人

SELECT name
FROM users
WHERE id IN (
    SELECT user_id
    FROM purchases
    WHERE product = 'iPhone'
);

✅ 子查询返回一个“集合”,主查询做匹配


4️⃣ 行级比较(一行对一行)

SELECT *
FROM emp e1
WHERE salary = (
    SELECT MAX(salary)
    FROM emp e2
    WHERE e2.dept = e1.dept
);

✅ “每个部门最高薪员工”


5️⃣ 派生表(FROM 中子查询)

SELECT dept, avg_sal
FROM (
    SELECT dept, AVG(salary) avg_sal
    FROM emp
    GROUP BY dept
) t
WHERE avg_sal > 10000;

✅ 先把数据“预处理”成一张临时表


二、不该用 Nested Query 的情况

❌ 能用 JOIN 更清晰时

-- 不推荐
SELECT name
FROM users
WHERE id = (SELECT user_id FROM orders WHERE id = 1);

-- 推荐
SELECT u.name
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE o.id = 1;

❌ 性能差(大表 + correlated subquery)

WHERE x IN (SELECT ... FROM big_table)

可能比 JOIN 慢很多


三、一句话判断标准

“主查询的条件或结果,必须依赖另一个查询先算出来” → 用 Nested Query

否则:

  • 只是“关联数据” → JOIN
  • 只是“过滤存在性” → EXISTS
  • 只是“集合匹配” → IN

如果你愿意,可以发一段具体 SQL 或业务场景,我可以直接告诉你「该不该嵌套、怎么写最好」。

向AI问一下细节

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

AI