Мене просто плутає послідовність виконання запиту SQL, коли ми використовуємо GROUP BY і HAVING із реченням WHERE. Хто з них виконується першим? Яка послідовність?
Мене просто плутає послідовність виконання запиту SQL, коли ми використовуємо GROUP BY і HAVING із реченням WHERE. Хто з них виконується першим? Яка послідовність?
Відповіді:
в порядку:
FROM & JOIN s визначають і фільтрують рядки
ДЕ більше фільтрів у рядках
GROUP BY об’єднує ці рядки у групи,
МАЮЧИ групи фільтрів
ORDER BY, упорядковує решту рядків / груп
LIMIT фільтри на решту рядків / груп
SET SHOWPLAN_ALL ON
Ось повна послідовність для сервера 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 * FROM table1 INNER JOIN table2 ON col = col2 WHERE table1.col = @val
Тут ON приходить після приєднання, а select приходить першим, будь-які пояснення?
FROM
спочатку, а потім ON
тощо.
WHERE є першим, тоді ви ЗГРУПЮЄТЕ результат запиту, і останнє, але не менш важливе речення HAVING береться для фільтрування згрупованого результату. Це "логічний" порядок, я не знаю, як це технічно реалізовано в двигуні.
Я думаю, що це реалізовано в двигуні, як сказав Матіас: ДЕ, ГРУПУЙТЕ, МАЄМО
Намагався знайти посилання в Інтернеті з переліком усієї послідовності (тобто "ВИБІР" падає унизу), але я не можу його знайти. Це було детально описано в книзі "Inside Microsoft SQL Server 2005", яку я прочитав не так давно, у програмі Solid Quality Learning
Редагувати: Знайдено посилання: http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx
Подумайте, що вам потрібно зробити, якщо ви хочете реалізувати:
Замовлення ДЕ, ГРУПУЙТЕ ПО І МЕЄ.
Внизу Порядок
Маючи Застереження, може бути перед / перед групою за пунктом.
Приклад: виберіть * FROM test_std; ROLL_NO SNAME DOB ВЧИТИ
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 рядків.
вибрати викладати, підрахувати ( ) підрахувати з test_std, що має count ( )> 1 групу за TEACH;
ВЧИТИ КОЛИЧКУ
Лангер 2 Заповіти 4
Це порядок виконання запиту SQL,
Ви можете перевірити порядок виконання на прикладах з цієї статті .
Для Вашого запитання рядки нижче можуть бути корисними та безпосередньо отриманими з цієї статті .
- GROUP BY -> Решта рядків після застосування обмежень WHERE потім групуються на основі загальних значень у стовпці, зазначеному в реченні GROUP BY. В результаті групування буде лише стільки рядків, скільки в цьому стовпці унікальних значень. Очевидно, це означає, що вам потрібно використовувати це лише тоді, коли у вашому запиті є сукупні функції.
- HAVING -> Якщо запит має речення GROUP BY, тоді обмеження в реченні HAVING застосовуються до згрупованих рядків, відкидаючи згруповані рядки, які не відповідають обмеженню. Як і речення WHERE, псевдоніми також не доступні з цього кроку в більшості баз даних.
Список літератури: -
ВИБІР
ІЗ
JOIN і
WHERE
GROUP BY
HAVING
ORDER BY