一尘不染

MySQL查询/子句执行顺序

mysql

在MySQL中执行子句的预定义顺序是什么?它是否在运行时确定,并且此顺序正确吗?

  • FROM clause
  • WHERE clause
  • GROUP BY clause
  • HAVING clause
  • SELECT clause
  • ORDER BY clause

阅读 333

收藏
2020-05-17

共1个答案

一尘不染

MySQL语句的实际执行有些棘手。但是,该标准确实指定了查询中元素解释的顺序。这基本上是在您指定的顺序,但我想HAVINGGROUP BY能来后SELECT

  • FROM 条款
  • WHERE 条款
  • SELECT 条款
  • GROUP BY 条款
  • HAVING 条款
  • ORDER BY 条款

这对于了解如何解析查询很重要。例如,您不能使用SELECTWHERE子句中的定义的列别名,因为会在WHERE之前解析SELECT。另一方面,这样的别名可以在ORDER BY子句中。

至于实际执行,这实际上取决于优化程序。例如:

. . .
GROUP BY a, b, c
ORDER BY NULL

. . .
GROUP BY a, b, c
ORDER BY a, b, c

两者都具有ORDER BY根本不执行的效果-因此不会在之后执行GROUP BY(在第一种情况下,效果是从中删除排序GROUP BY,在第二种情况中,效果仅是GROUP BY已经执行了)。

2020-05-17