Порядок выполнения MySQL запросов

1 декабря 2014
Оператор SELECT имеет следующую структуру:
SELECT
		[DISTINCT | DISTINCTROW | ALL]
		имя_столбца,...
	[FROM перечень_таблиц
		[{INNER | {LEFT | RIGHT | FULL} OUTER | CROSS } JOIN имя_таблицы_2 ON <условия соединения таблиц>]
	]
	[WHERE перечень условий]
	[GROUP BY {unsigned_integer | имя_столбца | формула} [ASC | DESC], ...]
	[HAVING условия_группировки]
	[ORDER BY {unsigned_integer | имя_столбца | формула} [ASC | DESC], ...]
	[LIMIT {номер_первой_выводимой_строки, количество_выводимых_строк | количество_выводимых строк}]

Но выполняется оператор выборки совсем не в том порядке, в котором он написан.
В общем виде запрос SELECT выполняется в следующем порядке:
  1. FROM, JOIN
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY
  7. LIMIT