Яка послідовність виконання пропозиції Group By, Have і Where у SQL Server?


91

Мене просто плутає послідовність виконання запиту SQL, коли ми використовуємо GROUP BY і HAVING із реченням WHERE. Хто з них виконується першим? Яка послідовність?

Відповіді:


184

в порядку:

FROM & JOIN s визначають і фільтрують рядки
ДЕ більше фільтрів у рядках
GROUP BY об’єднує ці рядки у групи,
МАЮЧИ групи фільтрів
ORDER BY, упорядковує решту рядків / груп
LIMIT фільтри на решту рядків / груп


чи є на це посилання ??
Geshan

3
@ Гешан, загляньSET SHOWPLAN_ALL ON
КМ.

Привіт, у мене одне питання. чи буде заява case, коли умова перевизначить умову where?
МАКС.

1
А щодо вибраного пункту. Це в Останньому?
MAX

Коротка і коротка відповідь! Дякую!
Абхішек Гош

14

Ось повна послідовність для сервера 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 приходить першим, будь-які пояснення?
нуб

Це лише синтаксис написання оператора SQL. Послідовність, яку я згадав, є реальним порядком, який оцінює механізм SQL. Це означає, що якщо ваш синтаксис запиту правильний, тоді механізм обчислює FROMспочатку, а потім ONтощо.
Мд. Суман Кабір

1
@ShailajaGuptaKapoor Ви можете прочитати це blogs.x2line.com/al/archive/2007/06/30/3187.aspx
Md. Suman Kabir

8

WHERE є першим, тоді ви ЗГРУПЮЄТЕ результат запиту, і останнє, але не менш важливе речення HAVING береться для фільтрування згрупованого результату. Це "логічний" порядок, я не знаю, як це технічно реалізовано в двигуні.


2
Варто додати, що оптимізатор може перенести пропозиції з HAVING в WHERE, якщо вони не залежать від сукупності. Це не вплине на показані результати.
Damien_The_Unbeliever

2

Я думаю, що це реалізовано в двигуні, як сказав Матіас: ДЕ, ГРУПУЙТЕ, МАЄМО

Намагався знайти посилання в Інтернеті з переліком усієї послідовності (тобто "ВИБІР" падає унизу), але я не можу його знайти. Це було детально описано в книзі "Inside Microsoft SQL Server 2005", яку я прочитав не так давно, у програмі Solid Quality Learning

Редагувати: Знайдено посилання: http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx


Дуже приємне пояснення, з яким ви пов’язали :-).
sleske

1
Посилання мертве. Якщо ви можете це виправити, було б чудово :)
Akash KC

2

В Oracle 12c ви можете запускати код як у будь-якій послідовності нижче:

Where
Group By
Having

Або

Where 
Having
Group by

1

Подумайте, що вам потрібно зробити, якщо ви хочете реалізувати:

  • ДЕ : Потрібно виконати операції JOIN.
  • GROUP BY : Ви вказуєте Групувати, щоб "згрупувати" результати при приєднанні, потім він повинен після операції JOIN, після використання WHERE.
  • HAVING : HAVING призначений для фільтрації, як сказано у виразах GROUP BY. Потім він виконується після GROUP BY.

Замовлення ДЕ, ГРУПУЙТЕ ПО І МЕЄ.


Те, що ви тут пояснили, є блискучим. Це зняло мої сумніви щодо ВЛАСНОСТІ. Отже, підсумовуючи - GROUP BY & HAVING працює так само, як SELECT & WHERE. Застереження HAVING завжди працює на даних таблиці COMPLETE, беручи умову GROUP BY на зображенні, а НЕ НА GROUPED дані.
Naveen Kumar

1

Внизу Порядок

  1. З & ПРИЄДНАЙТЕСЬ
  2. ДЕ
  3. ГРУПА ЗА
  4. МАЮЧИ
  5. ВИБЕРІТЬ
  6. СОРТУВАТИ ЗА
  7. ОБМЕЖИТИ

0

Маючи Застереження, може бути перед / перед групою за пунктом.

Приклад: виберіть * 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


0

Це порядок виконання запиту SQL,

введіть тут опис зображення

Ви можете перевірити порядок виконання на прикладах з цієї статті .

Для Вашого запитання рядки нижче можуть бути корисними та безпосередньо отриманими з цієї статті .

  1. GROUP BY -> Решта рядків після застосування обмежень WHERE потім групуються на основі загальних значень у стовпці, зазначеному в реченні GROUP BY. В результаті групування буде лише стільки рядків, скільки в цьому стовпці унікальних значень. Очевидно, це означає, що вам потрібно використовувати це лише тоді, коли у вашому запиті є сукупні функції.
  1. HAVING -> Якщо запит має речення GROUP BY, тоді обмеження в реченні HAVING застосовуються до згрупованих рядків, відкидаючи згруповані рядки, які не відповідають обмеженню. Як і речення WHERE, псевдоніми також не доступні з цього кроку в більшості баз даних.

Список літератури: -


-2

ВИБІР
ІЗ
JOIN і
WHERE
GROUP BY
HAVING
ORDER BY


13
Це насправді неправильно. Згідно з сертифікованими тренерами та офіційними навчальними матеріалами, замовлення здійснюється після вибору. Якийсь логічний, коли задумаєшся. Було б нерозумно замовляти віртуальний стіл, який ви ще не взяли і не склеїли. :)
simme
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.