Какова последовательность выполнения предложения Group By, Having и Where в SQL Server?
Я просто запутался с последовательностью выполнения SQL-запроса, когда мы используем GROUP BY и HAVING с предложением WHERE. Кто из них будет казнен первым? Какова последовательность действий?
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
Я думаю, что это реализовано в двигателе, как сказал Маттиас: где, группа, имея
пытался найти ссылку в интернете, которая перечисляет всю последовательность (т. е. "SELECT" идет прямо внизу), но я не могу ее найти. Это было подробно описано в книге "Внутри Microsoft SQL Server 2005", которую я читал не так давно, с помощью Solid Quality Learning
Edit: нашел ссылку:http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx
подумайте о том, что вам нужно сделать, если вы хотите реализовать:
- здесь: его необходимо выполнить операции соединения.
- ГРУППЫ ПО: вы указываете Group by ,чтобы "сгруппировать" результаты на соединении, затем он должен после операции соединения, после использования WHERE.
- С: наличие для фильтрации, как говорит группа по выражениям. Затем он выполняется после группы BY.
порядок Где, группа мимо и имея.