子查询
举例
查找出工资比Abel高的员工名字和工资
方式一 多次查询
SELECT salary `salary_abel` FROM employees WHERE last_name = 'Abel';
SELECT last_name, salary FROM employees WHERE salary > salary_abel;
方式二 自连接
SELECT e2.last_name, e2.salary FROM employees e1 , employees e2 WHERE e2.salary > e1.salary AND e1.last_name = 'Abel';
方式三 子查询
SELECT last_name,salary FROM employees WHERE salary > (
SELECT salary FROM employees WHERE last_name = 'Abel'
);
子查询
规范称谓
外查询(或主查询)/ 内查询(或子查询)
子查询的使用
子查询 在主查询之前执行
子查询的结果被主查询(外查询)使用
注意事项
- 子查询要包含在括号内
- 将子查询放在比较条件的右侧(保证可读性和美观性)
- 单行操作符对应单行子查询,多行操作符对应多行子查询
子查询的分类
角度一:单行子查询
VS 多行子查询
按照内查询的结果返回一条还是多条记录,将子查询分为 单行子查询
和多行子查询
角度二:相关(或关联)子查询
和 不相关(或非关联)子查询
按照内查询是否被执行多次,将子查询分为 相关(或关联)子查询 和 不相关(或非关联)子查询
比如:相关子查询的需求:查询工资大于本部门
平均工资的员工信息(外查询和内查询具有关联性,内查询执行次数和外查询相关)
不相关子查询的需求:查询工资大于本公司
平均工资的员工信息(外查询和内查询不具备关联性,一次执行内查询即可完成所有外查询)
单行子查询
单行操作符
= != > >= < <=
题目
查询与141号员工 manager_id和department_id相同的其他员工的 employee_id, manager_id, department_id
分析:与141号相同的 manager_id , department_id ;其他员工;
答案:
方式1:
SELECT employee_id, manager_Id, department_id FROM employees
WHERE
manager_id = (S