Какова последовательность выполнения предложения Group By, Having и Where в SQL Server?


Я просто запутался с последовательностью выполнения SQL-запроса, когда мы используем GROUP BY и HAVING с предложением WHERE. Кто из них будет казнен первым? Какова последовательность действий?

8 71

8 ответов:

по порядку:

С & вступить s определить и фильтровать строки
здесь больше фильтров на строках
ГРУППЫ ПО объединяет эти строки в группы
С группы фильтров
ПРИКАЗОМ упорядочивает оставшиеся строки / группы
ограничения фильтры по оставшимся строкам / группам

где первый, то вы группируете результат запроса, и последнее, но не менее важное предложение-принимается для фильтрации сгруппированного результата. Это "логический" порядок, я не знаю, как это технически реализовано в движке.

вот полная последовательность для sql server:

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

таким образом, из приведенного выше списка, вы можете легко понять последовательность выполнения GROUP BY, HAVING and WHERE что :

1.  WHERE
2.  GROUP BY
3.  HAVING

получить дополнительную информацию об этом от Microsoft

Я думаю, что это реализовано в двигателе, как сказал Маттиас: где, группа, имея

пытался найти ссылку в интернете, которая перечисляет всю последовательность (т. е. "SELECT" идет прямо внизу), но я не могу ее найти. Это было подробно описано в книге "Внутри Microsoft SQL Server 2005", которую я читал не так давно, с помощью Solid Quality Learning

Edit: нашел ссылку:http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx

подумайте о том, что вам нужно сделать, если вы хотите реализовать:

  • здесь: его необходимо выполнить операции соединения.
  • ГРУППЫ ПО: вы указываете Group by ,чтобы "сгруппировать" результаты на соединении, затем он должен после операции соединения, после использования WHERE.
  • С: наличие для фильтрации, как говорит группа по выражениям. Затем он выполняется после группы BY.

порядок Где, группа мимо и имея.

под заказ

  1. FROM & JOIN
  2. здесь
  3. ГРУППЫ ПО
  4. С
  5. выберите
  6. ПРИКАЗОМ
  7. ограничения

в Oracle 12c вы можете запускать код как в любой последовательности ниже:

Where
Group By
Having

или

Where 
Having
Group by

выберите
От
Присоединяется
Где
Группа по
Имея
ЗАКАЗАТЬ ПО