相关子查询用于逐行处理。对于外部查询的每一行,每个子查询执行一次。 对于父语句处理的每一行,相关子查询都会计算一次。父语句可以是 选择 , 使现代化 或 删去 陈述
null
SELECT column1, column2, .... FROM table1 outer WHERE column1 operator (SELECT column1, column2 FROM table2 WHERE expr1 = outer.expr2);
相关子查询是读取表中每一行并将每一行中的值与相关数据进行比较的一种方法。每当子查询必须为主查询考虑的每个候选行返回不同的结果或结果集时,就会使用它。换句话说,您可以使用相关子查询来回答一个多部分问题,该问题的答案取决于父语句处理的每一行中的值。
嵌套子查询与相关子查询:
对于普通嵌套子查询,内部 选择 查询首先运行并执行一次,返回主查询使用的值。然而,对于外部查询考虑的每个候选行,相关子查询执行一次。换句话说,内部查询由外部查询驱动。 注: 你也可以使用 任何 和 全部 相关子查询中的运算符。 相关子查询的示例: 找到所有收入高于所在部门平均工资的员工。
SELECT last_name, salary, department_id FROM employees outer WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = outer.department_id);
相关性的其他用途也在本文中 更新 和 删去
相关更新:
UPDATE table1 alias1 SET column = (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);
使用相关子查询根据另一个表中的行更新一个表中的行。
相关删除:
DELETE FROM table1 alias1 WHERE column1 operator (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);
使用相关子查询根据另一个表中的行删除一个表中的行。
使用EXISTS运算符:
EXISTS操作符测试子查询的结果集中是否存在行。如果找到子查询行值,则标记条件 真的 并且搜索不会在内部查询中继续,如果没有找到,则会标记条件 错误的 然后在内部查询中继续搜索。 使用EXIST运算符的示例: 找到至少有一人向其报告的员工。
SELECT employee_id, last_name, job_id, department_id FROM employees outer WHERE EXISTS ( SELECT ’X’ FROM employees WHERE manager_id = outer.employee_id);
输出:
使用NOT EXIST运算符的示例: 找到所有没有员工的部门。
SELECT department_id, department_name FROM departments d WHERE NOT EXISTS (SELECT ’X’ FROM employees WHERE department_id = d.department_id);
输出:
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END