SQL 的书写顺序和执行顺序是不同的,所以有时候会产生让人头疼的问题,比如having不能用窗口函数等。下面介绍了SQL的运行顺序.

  1. from/join

  2. where

  3. group by

  4. having

  5. select

  6. distinct

  7. order by

  8. limit

详解

1.读取数据

要想执行查询,执行引擎首先要找到相对应的数据(表),所以先执行from。如果有多张表join,则会去扫描所有提到的表,并且用ON里的条件进行聚合。它的扫描顺序是从左往右的。

2.按条件过滤

使用where从句里的条件过滤掉不符合条件的记录。此时数据还没有分组,所以无法使用聚合函数。同时因为还没进行列选取工作(select),所以也无法使用别名。

3.分组聚合

在这一步会根据group by的条件进行分组聚合,将符合条件的数据放到同一组里面,为之后的聚合计算做准备。

4.聚合计算

在上一步分组完成后,having这里就可以使用聚合函数进行计算了。这里可以对聚合计算后的条件进行一些过滤,比如大于平均值等。 常见的聚合函数

5.列选取

在这里,执行引擎会根据语句选取需要的列或者表达式。因为这里已经完成了聚合分组,所以可以使用聚合函数/窗口函数计算后的结果作为列。同时在这里也支持对列进行重命名。

6.去重

在这一步会对最终选取的结果进行去重.

7.排序

这一步会对最终结果根据order by语句指定的列进行排序.

8.返回指定结果数量

通过limit/offset 选取指定数量的记录进行返回。