以MySQL为例,SQL查询的关键词的执行顺序如下:
☞ 1. from(含子查询),from是查询的开端,首先需要知道最开始从哪个表开始的,确定数据源。
☞ 2. join,如果from后面是多张表,join关联,会首先对前两个表执行一个笛卡尔乘积,这时候就会生成第一个虚拟表T1
☞ 3. on,对虚表T1进行on筛选,只有那些符合的行才会被记录在虚表T2中。
☞ 4. where,对虚拟表T2进行where条件过滤。只有符合的记录才会被插入到虚拟表T3中。
☞ 5. group by,子句将T3中的唯一的值组合成为一组,得到虚拟表T4。
☞ 6. avg,sum…等聚合函数,聚合函数只是对分组的结果进行一些处理,拿到某些想要的聚合值,例如求和,统计数量等,并不生成虚拟表。
☞ 7. having,应用having筛选器,生成T5。having子句主要和group by子句配合使用,having筛选器是第一个也是为唯一一个应用到已分组数据的筛选器。
☞ 8. select,执行select操作,选择指定的列,插入到虚拟表T6中。
☞ 9. distinct,对T6中的记录进行去重。移除相同的行,产生虚拟表T7。
☞ 10.order by,应用order by子句。按照order_by_condition排序T7,此时返回的一个游标,而不是虚拟表。
☞ 11.limit,取出指定行的记录,产生虚拟表T8, 并将结果返回。