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