SQL子查询是在查询中嵌套SELECT语句,必须加括号,按位置分为WHERE型(作条件)、FROM型(作派生表需别名)、SELECT型(须标量);相关子查询依赖外层字段逐行执行。

SQL子查询就是在一个查询语句内部嵌套另一个SELECT语句,它像“查询中的查询”,常用于动态生成条件、替代固定值或分步处理数据。掌握子查询的关键不在于记住语法,而在于理解它的执行逻辑和适用场景。
子查询作为表达式的一部分,必须用圆括号包裹;否则SQL会报错。另外,除非子查询配合TOP/LIMIT或窗口函数使用,否则不能带ORDER BY——因为子查询返回的是一个结果集,不是最终输出,排序没有意义。
SELECT name FROM student WHERE dept_id IN (SELECT id FROM department WHERE location = '北京');
SELECT name FROM student WHERE dept_id IN SELECT id FROM department WHERE location = '北京';(缺括号)(SELECT id FROM department ORDER BY name)(独立子查询中ORDER BY非法)子查询在哪出现,就决定了它怎么用、返回什么、是否支持多行。
salary > (SELECT AVG(salary) FROM employee)
SELECT dept, avg_sal FROM (SELECT dept, AVG(salary) AS avg_sal FROM staff GROUP BY dept) t WHERE avg_sal > 8000;
SELECT id, name, (SELECT COUNT(*) FROM order WHERE user_id = u.id) AS order_count FROM user u;
相关子查询会引用外部查询的列,因此不是先算完再匹配,而是对外表每一行都执行一次子查询。性能可能较差,但逻辑清晰,适合“每个用户最新订单”这类问题。
SELECT d.name, (SELECT TOP 1 s.name FROM staff s WHERE s.dept_id = d.id ORDER BY s.salary DESC) AS top_employee FROM department d;
s.dept_id = d.id建立;SQL引擎会为department表每行代入dept_id去跑一次子查询。基本上就这些。子查询不复杂,但容易忽略括号、别名、单多行限制这些细节。写的时候多问一句:“它返回几行几列?放在这儿合不合语法?” 就能避开大部分坑。
以上就是SQL子查询基础教程_SQL嵌套查询结构解析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号