3 查询处理

查询逻辑的处理顺序

  1. from
  2. on
  3. join
  4. where
  5. group by
  6. having
  7. select
  8. order by
  9. limit

    注意

  10. where语句再分组和select查询之前,因此在where条件中不能使用分组函数count,max等,也不能使用select语句中的别名

image.png

  1. 数据查询过程
    1. 先根据连接制作笛卡尔积临时表。(AxB):数据量太大的话会特别耗费时间。在表B中添加索引可以避免笛卡尔积的产生
    2. 根据on条件筛选
    3. 如果时外连接,此时还要重新添加外部行!
    4. 使用where条件过滤
    5. 分组
    6. 应用having过滤
    7. 处理select列表
  2. 添加外部行。

在连接为外连接:left joint、right join 时。虽然数据会一开始按照on条件过滤。
但是过滤之后,保留表中被on条件过滤掉的数据会加回到临时表中。

A left join B 中A就是保留表。

  1. 此时的问题就是如果on条件在保留表中进行判断,那么就算被on排除,最后也会在添加外部行中重新加回来,污染数据。