子查询指一个查询语句嵌套在另一个查询语句内部的查询。
SQL中子查询的使用大大增强了SELECT查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。

案例

需求:谁的工资比Abel 高?

  1. #方式1:
  2. # 先查Abel的工资->11000
  3. SELECT salary
  4. FROM employees
  5. WHERE last_name = 'Abel';
  6. # 查工资比11000高的人
  7. SELECT last_name,salary
  8. FROM employees
  9. WHERE salary > 11000;
  10. #方式2:自连接
  11. SELECT e2.last_name,e2.salary
  12. FROM employees e1,employees e2
  13. WHERE e2.`salary` > e1.`salary` #多表的连接条件
  14. AND e1.last_name = 'Abel';
  15. #方式3:子查询
  16. SELECT last_name,salary
  17. FROM employees
  18. WHERE salary > (
  19. SELECT salary
  20. FROM employees
  21. WHERE last_name = 'Abel'
  22. );

子查询的基本使用

  • 子查询(内查询)在主查询之前一次执行完成。
  • 子查询的结果被主查询(外查询使用)
  • 注意:
    • 子查询要包含在括号内
    • 子查询放在比较条件的右侧(可读性强)
    • 单行操作符对应单行子查询,多行操作符对应多行子查询。

子查询分类

  • 角度一:从内查询返回的条目数

单行子查询 VS 多行子查询

  • 角度二:内查询是否被执行多次

相关子查询 VS 不相关子查询(即:关联子查询 VS 非关联子查询)