sql并不是按照我们的书写顺序从左往右依次执行的,它是按照固定的顺序解析的,一般是按照如下顺序:
1.from
2.on
3.join
4.where
5.group by
6.having
7.select
8.distinct
9.order by
10.limit
from:
第一步就是选择出from关键词后面跟的表
join on:
join是表示要关联的表,on是连接的条件。通过from和join on选择出需要执行的数据库表,产生笛卡尔积,生成合并的临时中间表Temp1,on:确定表的绑定关系,通过on产生临时中间表Temp2。
where:
where表示筛选,根据where后面的条件进行过滤,按照指定的字段的值从临时中间表Temp2中筛选需要的数据,生成临时中间表Temp3。注意:在where中不可以使用聚合函数。
group by:
group by是进行分组,对where条件过滤后的临时表Temp3按照固定的字段进行分组,产生临时中间表Temp4,表中的数据以组的形式存在。
Having:
对临时中间表Temp4进行聚合,可以为count等计数,然后产生中间表Temp5,这里可以使用select中的别名
select:
对分组聚合完的表挑选出需要查询的数据,如果是*解析为所有数据,产生中间表Temp6。
Distinct:
distinct对所有的数据进行去重,如果有min、max函数会执行字段函数计算,产生临时表Temp7。
order by:
根据Temp7进行排列,产生临时中间表Temp8,这个过程比较耗费资源。
limit:
limit对中间表Temp8进行分页,产生临时中间表Temp9,返回给客户端。