子查询指一个查询语句嵌套在另一个查询语句内部的查询。
SQL中子查询的使用大大增强了SELECT查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。
案例
需求:谁的工资比Abel 高?
#方式1:
# 先查Abel的工资->11000
SELECT salary
FROM employees
WHERE last_name = 'Abel';
# 查工资比11000高的人
SELECT last_name,salary
FROM employees
WHERE salary > 11000;
#方式2:自连接
SELECT e2.last_name,e2.salary
FROM employees e1,employees e2
WHERE e2.`salary` > e1.`salary` #多表的连接条件
AND e1.last_name = 'Abel';
#方式3:子查询
SELECT last_name,salary
FROM employees
WHERE salary > (
SELECT salary
FROM employees
WHERE last_name = 'Abel'
);
子查询的基本使用
- 子查询(内查询)在主查询之前一次执行完成。
- 子查询的结果被主查询(外查询使用)
- 注意:
- 子查询要包含在括号内
- 子查询放在比较条件的右侧(可读性强)
- 单行操作符对应单行子查询,多行操作符对应多行子查询。
子查询分类
- 角度一:从内查询返回的条目数
单行子查询 VS 多行子查询
- 角度二:内查询是否被执行多次
相关子查询 VS 不相关子查询(即:关联子查询 VS 非关联子查询)