3 查询处理
查询逻辑的处理顺序
- from
- on
- join
- where
- group by
- having
- select
- order by
-
注意
where语句再分组和select查询之前,因此在where条件中不能使用分组函数count,max等,也不能使用select语句中的别名

- 数据查询过程
- 先根据连接制作笛卡尔积临时表。(AxB):数据量太大的话会特别耗费时间。在表B中添加索引可以避免笛卡尔积的产生
- 根据on条件筛选
- 如果时外连接,此时还要重新添加外部行!
- 使用where条件过滤
- 分组
- 应用having过滤
- 处理select列表
- 添加外部行。
在连接为外连接:left joint、right join 时。虽然数据会一开始按照on条件过滤。
但是过滤之后,保留表中被on条件过滤掉的数据会加回到临时表中。
A left join B 中A就是保留表。
此时的问题就是如果on条件在保留表中进行判断,那么就算被on排除,最后也会在添加外部行中重新加回来,污染数据。
