MySQL SELECT语句执行顺序

发布时间 2023-06-28 15:51:12作者: 穆海如枫

参考资料:

  1. sql语句的执行顺序以及流程(最新,最全,直接用)

SELECT语句执行顺序

  1. FROM : 从右往左,组装来自不同数据源的数据(包括ON JOIN)
  2. WHERE : 基于指定的条件对记录行进行筛选,从右往左
  3. GROUP BY : 根据字段划分为多个分组;分组后除聚集函数进行计算,或者分组字段,其余均返回第一行数据
  4. 使用聚集函数进行计算 : 计算select 后面或者 having 后面的聚焦函数
  5. HAVING : 分组后还要进行筛选 那么就需要having语句(必须有GROUP BY)
  6. 计算所有的表达式
  7. SELECT :包括 DISTINCT 去重,窗口函数执行
  8. UNION :合并表数据
  9. ORDER BY :排序
  10. LIMIT :限制返回记录

关于 HAVING

HAVING主要是对聚合后对组记录进行筛选。所以在使用HAVING时,相关的计算(step4)已经完成,简单的来说就是 把 GROUP BY 聚合后的结果作为 HAVING 子句的起点, 所以 HAVING 适用的字段如下:

  1. 常量
  2. 聚合函数
  3. 聚合键(GROUP BY 字段)
  4. SELECT 出现的字段

HAVING 和 WHERE 的区别

1. HAVING 不能使用 SELECT 和 FROM 之间没有列出的字段,而 WHERE 不能使用select后写的常量的别名(但是 HAVING 却可以),换言之 WHERE 只可以使用常量和表中的数据
2. WHERE不能使用聚集函数,因为 聚集函数计算 是在 GROUP BY 之后执行