摘要:在本教程中,您将学习如何使用 SQL 相关子查询来执行逐行比较和复杂筛选。
SQL 相关子查询简介 #
相关子查询是一种子查询,其输入值依赖于外部查询。
常规查询执行一次,并将结果提供给外部查询。然而,相关子查询会重复执行——外部查询处理的每一行都会执行一次。
相关子查询有两个主要特点:
- 引用外部查询中的列。
- 对外部查询的每一行执行一次。
通常,您会在 WHERE、SELECT 或 HAVING 子句中使用相关子查询。
SQL 相关子查询示例 #
我们将使用 HR 示例数据库中的 employees 表。

以下示例使用相关子查询来查找薪资高于其所在部门平均薪资的员工。
SELECT
first_name,
department_id,
salary
FROM
employees e1
WHERE
salary > (
SELECT
AVG(salary) average_salary
FROM
employees e2
WHERE
e2.department_id = e1.department_id
)
ORDER BY
department_id;Code language: SQL (Structured Query Language) (sql)输出
first_name | department_id | salary
------------+---------------+----------
Michael | 2 | 13000.00
Den | 3 | 11000.00
Shanta | 5 | 6500.00
Matthew | 5 | 8000.00
Adam | 5 | 8200.00
Payam | 5 | 7900.00
Bruce | 6 | 6000.00
Alexander | 6 | 9000.00
John | 8 | 14000.00
Karen | 8 | 13500.00
Steven | 9 | 24000.00
Daniel | 10 | 9000.00
Nancy | 10 | 12000.00
Shelley | 11 | 12000.00Code language: SQL (Structured Query Language) (sql)查询工作原理:
外部查询选择薪资高于该员工所在部门所有员工平均薪资的员工 (e1)。
子查询计算当前员工所在部门的平均薪资 (e2.department_id = e1.department_id)。
对于外部查询中选择的每个员工,子查询都会执行一次。
摘要 #
- 相关子查询是使用外部查询中的值的查询。
- 对于外部查询的每一行,相关子查询都会执行一次。
测验 #
数据库 #
本教程是否有帮助?