9. 子查询
举例: 查询工资比 Jim 高的所有的员工;
方式一 先查一下Jim的工资,再带进去
SELECT salary FROM employees WHERE last_name = 'Jim' SELECT last_name,salary FROM employees WHERE salary > 1100;
方式二:自连接
SELECT e2.last_name,e2.salary FROM employees e1,employees e2 WHERE e2.`salary` > e1.`salary` AND e1.last_name == 'Jim'
方式三:子查询
SELECT last_name,salary FROM employees WHERE salary > ( SELECT salary FROM employees WHERE last_name = 'Jim' );
称谓规范:外查询(主查询)、内查询(子查询)、
## 可读性比较好
SELECT last_name,salary
FROM employees
WHERE salary > (
SELECT salary
FROM employees
WHERE last_name = 'Jim'
);
## 可读性较差
SELECT last_name,salary
FROM employees
WHERE (
SELECT salary
FROM employees
WHERE last_name = 'Jim'
) < salary;
自查询的分类
角度1:从内查询返回结果的条目数
- 单行自查询
- 多行自查询
角度2:内查询是否被执行多次
- 相关自查询(举例:查询工资大于本部门平均工资的 人)
- 非相关子查询