再编写mysql的时候我们需要注意它的语法,但是我们也需要知道它在内部是怎么执行的。
手写顺序
select distinct <select_list>
from <left_table>
<join_type> join <right_table>
on <join_condition>
where <where_condition>
group by <>group_by_list>
having <having_condition>
order by <order_by_list>
limit <limit_number>
执行顺序:
- FORM:左表和右表的笛卡尔积,产生虚拟表 v1
- ON:对v1 进行筛选,根据join条件过滤,产生 v2
- JOIN:如果是left join就把左表在 v2 的结果通过on 过滤,通过右表的外部行过滤,产生 v3
- WHERE:过滤条件,产生 v4
- GROUP BY:分组,产生 v5
- HAVING:过滤条件,产生 v6
- SELECT:load 出指定的列,产生v7
- DISTINCT:排重,产生v8
- ORDER BY:排序,产生v9
- LIMIT:取出指定的行,并返回结果