梗概

  • 子查询用到了外层查询的数据
  • 先做外层查询再做内层查询

代码示例

在数据库查询中,相关子查询是一种常见的模式。它们在外层查询中使用来自内层查询的结果,通常用于实现复杂的过滤条件。以下是一些常见的相关子查询示例:

示例1:使用相关子查询进行筛选

假设我们有两个表 employeesdepartments。我们希望找到每个部门中工资高于平均工资的员工。

SELECT emp_id, emp_name, salary
FROM employees e
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
    WHERE department_id = e.department_id
);

在这个例子中,内层子查询计算了每个部门中的平均工资,然后外层查询从 employees 表中过滤掉那些低于该平均工资的员工。

示例2:结合 EXISTS 使用

有时候,我们需要检查某个条件是否存在,而不仅仅是比较数值。在这种情况下,我们可以使用 EXISTS 关键字。

SELECT emp_id, emp_name
FROM employees e
WHERE EXISTS (
    SELECT 1
    FROM projects p
    WHERE p.emp_id = e.emp_id AND p.status = 'active'
);

这里,我们选择了所有正在参与活跃项目的员工。内层子查询检查员工是否至少参与一个活跃项目,并且使用 EXISTS 来决定是否包括该员工。

示例3:关联更新操作

除了选择操作之外,相关子查询也可以用于更新操作。例如,我们希望将所有销售部门员工的奖金增加10%。

UPDATE employees e
SET bonus = bonus * 1.10
WHERE department_id = (
    SELECT department_id 
    FROM departments 
    WHERE dept_name = 'Sales'
);

内层子查询获取销售部门的标识符,然后外层更新语句根据这个标识符来更新相应记录。

这些示例展示了如何利用相关子查询来实现更复杂的数据操作和分析。此外,在实际应用中注意性能优化,因为相关子查询可能会影响执行效率。