6

Пожалуйста, дайте порядок выполнения операторов sql запроса или дайте ссылку, где прочитать об этом: что за чем выполняется. Например (с потолка):

SELECT
  t1.id AS id, t1.name AS name, count(*) AS cnt
FROM
  tbl_name1 t1
INNER JOIN
  tbl_name2 t2 ON t1.id = t2.id
WHERE
  t1.id > 10
GROUP BY
  t1.name
HAVING
  cnt > 10
ORDER BY
  t1.id

Сначала GROUP BY, потом? Последним ORDER BY... Нигде не могу найти нормальной информации об этом :((

FoxManiac
  • 466
  • 1
  • 4
  • 10

4 Answers4

9

Для SQL Server смотри ссылку.

Логический порядок обработки инструкции SELECT:

  1. FROM
  2. ON
  3. JOIN
  4. where
  5. GROUP BY
  6. WITH CUBE или WITH ROLLUP
  7. HAVING
  8. SELECT
  9. DISTINCT
  10. ORDER BY
  11. TOP
2

Порядок выполнения зависит от ситуации и определяется перед выполнением запроса. СУБД позволяют просмотреть план выполнения - это то, как именно СУБД решила выполнить запрос.

  • вопрос не про порядок выполнение запроса, а про порядок выполнения операторов - он фиксированный – Vitaliy Zlobin Feb 04 '23 at 06:53
1

Порядок выполнения предложений в операторе select

msi
  • 11,453
  • а вот про JOIN там ни слова! :) или оно к FROM приравнивается? если так - то перед FROM или после? :) – FoxManiac Aug 13 '11 at 13:12
  • а, наверное внутренний оптимизатор сводит все к предложению WHERE? как думаете, коллеги? – FoxManiac Aug 13 '11 at 13:22
  • 1
    Соединение таблиц (JOIN) находится в предложении FROM и только там. – msi Aug 13 '11 at 13:48
  • т.е. JOIN не отдельный оператор, а как часть предложения FROM? – FoxManiac Aug 13 '11 at 13:54
  • 1
    Да. Во FROM перечисляются таблицы, используемые в запросе. Начиная со стандарта SQL-92, там могут использоваться явные операции их соединения (т.е. JOIN). До этого условия соединения задавались в предложении WHERE. – msi Aug 13 '11 at 14:18
0
SELECT 
       [DISTINCT | DISTINCTROW | ALL]
       select_expression,...
   [FROM table_references]
     [WHERE where_definition]
     [GROUP BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]
     [HAVING where_definition]
     [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]
Avalon
  • 1,016
  • 4
    Это синтаксис, а порядок разбора отличается от синтаксического порядка, например, предложение select выполняется почти в самом конце, перед order by. Именно поэтому алиасы, данные столбцам, не видны, скажем, в предложении where. – msi Aug 13 '11 at 07:45