实际问题

1554991034688.png
现有解决方式:

  1. # 方式一:
  2. SELECT salary
  3. FROM employees
  4. WHERE last_name = 'Abel';
  5. SELECT last_name,salary
  6. FROM employees
  7. WHERE salary > 11000;
  8. # 方式二:自连接
  9. SELECT e2.last_name,e2.salary
  10. FROM employees e1,employees e2
  11. WHERE e1.last_name = 'Abel'
  12. AND e1.`salary` < e2.`salary`
  1. # 方式三:子查询
  2. SELECT last_name,salary
  3. FROM employees
  4. WHERE salary > (
  5. SELECT salary
  6. FROM employees
  7. WHERE last_name = 'Abel'
  8. );

子查询的基本使用

子查询的基本语法结构:
1554991054388.png
子查询(内查询)在主查询之前一次执行完成。
子查询的结果被主查询(外查询)使用 。
注意事项

  • 子查询要包含在括号内
  • 将子查询放在比较条件的右侧
  • 单行操作符对应单行子查询,多行操作符对应多行子查询

    子查询的分类

    分类方式 1:
    我们按内查询的结果返回一条还是多条记录,将子查询分为单行子查询、多行子查询。

单行子查询:
1554991538719.png
多行子查询:
1554991555669.png

分类方式 2:

我们按内查询是否被执行多次,将子查询划分为相关(或关联)子查询和不相关(或非关联)子查询。

子查询从数据表中查询了数据结果,如果这个数据结果只执行一次,然后这个数据结果作为主查询的条件进行执行,那么这样的子查询叫做不相关子查询。

同样,如果子查询需要执行多次,即采用循环的方式,先从外部查询开始,每次都传入子查询进行查询,然后再将结果反馈给外部,这种嵌套的执行方式就称为相关子查询。