在数据库(尤其是 SQL)中,**Subquery(子查询)**是指嵌套在另一条 SQL 语句中的查询。它的主要优势和适用场景如下:
子查询可以把复杂问题“分步骤”表达:
示例:
SELECT name
FROM employees
WHERE dept_id = (
SELECT id FROM departments WHERE name = 'IT'
);
比多表 JOIN 更容易让人一眼看懂“先找部门,再找员工”。
有些场景只用子查询更简洁,不需要把所有表都 JOIN 起来:
示例:
SELECT *
FROM orders
WHERE customer_id IN (
SELECT customer_id FROM vip_customers
);
子查询可以:
例如:
SELECT dept_id,
(SELECT COUNT(*) FROM employees e WHERE e.dept_id = d.id) AS emp_count
FROM departments d;
子查询相当于“临时视图”:
在现代数据库中:
EXISTS 子查询通常比 JOIN + DISTINCT 更高效子查询可以基于运行时数据动态生成结果,例如:
SELECT *
FROM employees e
WHERE salary = (
SELECT MAX(salary) FROM employees WHERE dept_id = e.dept_id
);
也不是万能的:
子查询的优势在于:把复杂查询拆成“小而清晰的逻辑单元”,在可读性、灵活性和部分性能场景上更有优势。
如果你愿意,我也可以对比 子查询 vs JOIN vs CTE 的适用场景。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。