Справочники, инструменты, документация

SQL: Порядок выполнения 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. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY
  7. LIMIT