Почта:vova@vbeg.ru
Скайп:vova-beglecov

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

Оператор 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. FWHERE
  3. FGROUP BY
  4. FHAVING
  5. FSELECT
  6. FORDER BY
  7. LIMIT