Mysql SQL查询处理的顺序: (8)select (9)distinct <select_list> (1)from <left_table> (3)<join_type> join <right_table> (2)on <join_condition> (4)where <where_condition> (5)group by <group by list> (6)with {cube|rollup} (7)having <having_condition> (10)order by <order_by_list> (11)limit <limit_number> 第一个被处理的子句总是from,最后执行的是limit,每个操作都会产生一个虚拟表,做为下一步的输入,这个虚拟表对用户是透明的,只有最后一个虚拟表才会返回给用户 (1)from 对<left_table>和<right_table>执行笛卡尔积,产生虚拟表VT1 (2)on 对VT1应用on条件过滤,把符合<join_condition>的记录放入VT2 (3)join 如果指定了join类型,如 left join、right join,把相应的外部行添加到VT2,形成VT3 如果from中有两个以上的表,使用VT3和下一个表再执行一遍前3步,直到处理完所有的表 (4)where 对VT3应用where过滤,把符合<where_condition>的记录放入VT4 (5)group by 根据<group by list>对VT4进行分组操作,产生VT5 (6)cube|rollup 对表VT5进行CUBE或ROLLUP操作,产生表VT6 (7)having 对VT6应用having过滤,符合<having_condition>的记录放入VT7 (8)select 从VT9中挑选出目标列,放入VT8 (9)distinct 对VT8进行去重操作,产生VT9 (10)order by 根据<order_by_list>对VT9进行排序,产生VT10 (11)limit 取出指定行的记录,产生VT11,返回给用户