嵌套查询(Subquery,也叫子查询)是指在一条 SQL 语句中嵌套另一条 SELECT 语句的查询方式。它并不是“任何时候都比 JOIN 好”,但在一些场景下确实更合适。
下面从什么时候适合用嵌套查询的角度来说,配例子更好理解。
当你需要先算出一个值或集合,再基于它查数据时。
例子:查工资高于平均工资的员工
SELECT name, salary
FROM employee
WHERE salary > (
SELECT AVG(salary)
FROM employee
);
✅ 这里用嵌套比 JOIN 自然,因为“平均工资”是一个整体计算结果。
常用于关联表筛选。
例子:查有订单的客户
SELECT name
FROM customer c
WHERE EXISTS (
SELECT 1
FROM orders o
WHERE o.customer_id = c.id
);
或者:
SELECT name
FROM customer
WHERE id IN (
SELECT customer_id
FROM orders
);
✅ 语义清晰:“只要存在 / 属于某个集合”
比如:查“消费总额大于 1000 的客户”
SELECT customer_id
FROM (
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
) t
WHERE total > 1000;
✅ 派生表(嵌套 SELECT)让逻辑更清楚
例子:查每个员工的部门名称
SELECT name,
(SELECT dept_name FROM dept WHERE dept.id = employee.dept_id) AS dept_name
FROM employee;
✅ 适合“一对一”的小表关联
有时候嵌套查询:
❌ 大表 JOIN 场景
❌ 多层深度嵌套(>2层)
❌ 性能敏感系统
这些通常 JOIN 更高效、更易优化
嵌套查询适合:先算结果、再判断、再筛选;JOIN 适合:多表直接关联。
如果你愿意,可以发一句你正在写的 SQL,我可以直接告诉你“该不该用嵌套”。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。