一、概念
非相关子查询:子查询中所用到的条件与父查询无联系。
相关子查询:子查询中所用到的条件与父查询有联系。
二、例子
1、(非相关子查询)查询员工中工资大于部门department_id=101的平均工资的员工的last_name,salary和其department_id
SELECT last_name, salary, department_id
FROM employees e
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department_id = ‘101’
);
过程:先进行子查询并将结果返回给父查询,进而完成父查询。
2、(相关子查询)查询员工中工资大于本部门平均工资的员工的last_name,salary和其department_id
SELECT last_name, salary, department_id
FROM employees e
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department_id = e.department_id
);
过程:先从父查询的表e中读取第一条数据并代入子查询中,此时相当于一次非相关子查询,返回AVG(salary) 给父查询,当父查询完成结束后代表此次的非相关子查询完成;之后,再从父查询的表e中读取第二条数据并代入子查询中,此时还需经历一次非相关子查询;如此反复,直至父查询的表e中所有数据均读取完毕。