SQL相关子查询

相关子查询用于逐行处理。对于外部查询的每一行,每个子查询执行一次。 SQL_Correlated_Subqueries 对于父语句处理的每一行,相关子查询都会计算一次。父语句可以是 选择 , 使现代化 删去 陈述

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);

输出: 图片[2]-SQL相关子查询-yiteyi-C++库

使用NOT EXIST运算符的示例: 找到所有没有员工的部门。

SELECT department_id, department_name
FROM departments d
WHERE NOT EXISTS (SELECT ’X’
FROM employees
WHERE department_id
= d.department_id);

输出: 图片[3]-SQL相关子查询-yiteyi-C++库

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享