在MySQL中执行子句的预定义顺序是什么?它是否在运行时确定,并且此顺序正确吗?
FROM clause
WHERE clause
GROUP BY clause
HAVING clause
SELECT clause
ORDER BY clause
MySQL语句的实际执行有些棘手。但是,该标准确实指定了查询中元素解释的顺序。这基本上是在您指定的顺序,但我想HAVING和GROUP BY能来后SELECT:
HAVING
GROUP BY
SELECT
FROM
WHERE
ORDER BY
这对于了解如何解析查询很重要。例如,您不能使用SELECT在WHERE子句中的定义的列别名,因为会在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已经执行了)。