Действителното изпълнение на MySQL операторите е малко сложно. Стандартът обаче определя реда на интерпретация на елементите в заявката. Това е основно в реда, който сте посочили, въпреки че според мен HAVING
и GROUP BY
може да дойде след SELECT
:
FROM
клаузаWHERE
клаузаSELECT
клаузаGROUP BY
клаузаHAVING
клауза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
вече го прави).