Ответ 1
по порядку:
FROM и JOIN определяют и фильтруют строки
ГДЕ больше фильтров на строках
GROUP BY объединяет эти строки в группы
ОБРАТИТЬ фильтры групп
ORDER BY упорядочивает оставшиеся строки/группы
LIMIT фильтрует оставшиеся строки/группы
Я просто путаюсь с последовательностью выполнения SQL-запроса, когда мы используем GROUP BY и HAVING с предложением WHERE. Какой из них выполняется первым? Какова последовательность?
по порядку:
FROM и JOIN определяют и фильтруют строки
ГДЕ больше фильтров на строках
GROUP BY объединяет эти строки в группы
ОБРАТИТЬ фильтры групп
ORDER BY упорядочивает оставшиеся строки/группы
LIMIT фильтрует оставшиеся строки/группы
ГДЕ сначала, затем вы GROUP результат запроса и последнее, но не менее важное значение. HAVING-предложение принимается для фильтрации сгруппированного результата. Это "логический" порядок, я не знаю, как это технически реализовано в движке.
Вот полная последовательность для сервера 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
Я думаю, что он реализован в движке, как сказал Маттиас: ГДЕ, ГРУППА, ИМЕЮЩИЕ
пытался найти ссылку онлайн, в которой перечисляется вся последовательность (т.е. "SELECT" идет вниз внизу), но я не могу ее найти. Это было подробно описано в книге "Inside Microsoft SQL Server 2005", которую я давно не читал, Solid Solid Learning
Изменить: Найдите ссылку: http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx
Подумайте, что вам нужно сделать, если вы хотите реализовать:
Порядок: WHERE, GROUP BY и HAVING.
В приведенном ниже Заказе
В Oracle 12c вы можете запускать код как в следующей последовательности:
Where
Group By
Having
или
Where
Having
Group by
Параметр "Оговорка" может иметь место до/до раздела 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
SELECT
ОТ
JOIN и
ГДЕ
ГРУППА
HAVING
ORDER BY