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

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

Ответ 1

по порядку:

FROM и JOIN определяют и фильтруют строки
ГДЕ больше фильтров на строках
GROUP BY объединяет эти строки в группы
ОБРАТИТЬ фильтры групп
ORDER BY упорядочивает оставшиеся строки/группы
LIMIT фильтрует оставшиеся строки/группы

Ответ 2

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

Ответ 3

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

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

Ответ 4

Я думаю, что он реализован в движке, как сказал Маттиас: ГДЕ, ГРУППА, ИМЕЮЩИЕ

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

Изменить: Найдите ссылку: http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx

Ответ 5

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

  • WHERE: необходимо выполнить операции JOIN.
  • GROUP BY. Вы указываете Group by, чтобы "группировать" результаты в соединении, после чего она должна после операции JOIN после использования WHERE.
  • HAVING: HAVING предназначен для фильтрации в выражениях GROUP BY. Затем он выполняется после GROUP BY.

Порядок: WHERE, GROUP BY и HAVING.

Ответ 6

В приведенном ниже Заказе

  • FROM и JOIN
  • WHERE
  • GROUP BY
  • HAVING
  • SELECT
  • ORDER BY
  • LIMIT

Ответ 7

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

Where
Group By
Having

или

Where 
Having
Group by

Ответ 8

Параметр "Оговорка" может иметь место до/до раздела group by.

Пример: выберите * FROM test_std; ROLL_NO SNAME DOB TEACH


     1 John       27-AUG-18 Wills     
     2 Knit       27-AUG-18 Prestion  
     3 Perl       27-AUG-18 Wills     
     4 Ohrm       27-AUG-18 Woods     
     5 Smith      27-AUG-18 Charmy    
     6 Jony       27-AUG-18 Wills     
       Warner     20-NOV-18 Wills     
       Marsh      12-NOV-18 Langer    
       FINCH      18-OCT-18 Langer    

Выбрано 9 строк.

выберите учить, count() count из test_std, у которого count()> 1 группа TEACH;

TEACH COUNT


Langer 2 Wills 4

Ответ 9

SELECT
ОТ
JOIN и
ГДЕ
ГРУППА

HAVING
ORDER BY