这也是一篇不完全的翻译,有兴趣的读者可以查看原文。
下面的SQL语句的执行顺序只是逻辑上的顺序,在实际中优化器会选择最省时省力的顺序:
- FROM:这个只需要说一点的是JOIN这一步包含在FROM里面,总之就是先确定表,加载所有表的所有行
- WHERE:过滤掉不需要的行
- GROUP BY:根据表达式或者列名来聚合(分组),分组完成后,所有的列只剩下了作为组名的列,组内部只对聚合函数可见。
- 聚合函数:聚合函数相当于可以进入分组的内部,然后计算出一个只有一个值的结果,例如组内的最大最小平均总和。
- HAVING:过滤掉聚合后的不需要的行
- 窗口函数:在此时的所有行开窗口,并在窗口内执行窗口函数
- SELECT:选择需要的列,也叫project,投射
- DISTINCT:在选择的列里面进行(xing)行(hang)去重
- UNION,INTERSECT,EXCEPT:对得到的结果进行集合操作
- ORDEY BY:对进行完集合操作后得到的结果集排序
- OFFECT:没见过,不知道是干嘛的,别人说“Don’t use offset”
- LIMIT,FETCH,TOP:最后选择前几行作为最终的结果