Список выбора не всегда может быть оценен последним, потому что ORDER BY может использовать псевдонимы, которые определены в списке выбора, поэтому они должны быть выполнены позже. Например:
SELECT foo+bar foobar FROM table1 ORDER BY foobar
Я бы сказал, что в общем случае порядок исполнения может быть примерно таким:
- FROM
- ГДЕ
- GROUP BY
- SELECT
- HAVING
- ЗАКАЗАТЬ НА
Предложения GROUP BY и WHERE можно поменять местами без изменения результата, как и HAVING и ORDER BY.
В действительности все сложнее, потому что база данных может изменить порядок выполнения в соответствии с различными планами выполнения. Пока результат остается неизменным, не имеет значения, в каком порядке он выполняется.
Также обратите внимание, что если для предложения ORDER BY выбран индекс, строки могут уже быть в правильном порядке при чтении с диска. В этом случае предложение ORDER BY на самом деле не выполняется вообще.