138 votes

Séquence d'exécution de Group By, Having et Where clause dans SQL Server ?

Je suis juste confus avec la séquence d'exécution d'une requête SQL quand nous utilisons GROUP BY y HAVING avec un WHERE clause. Laquelle est exécutée en premier ? Quelle est la séquence ?

253voto

KM. Points 51800

Dans l'ordre :

DE & JOIN s déterminer et filtrer les rangs
plus de filtres sur les rangs
GROUPE PAR combine ces lignes en groupes
AYANT groupes de filtres
ORDER BY arrange les rangées/groupes restants
LIMITE filtres sur les lignes/groupes restants

42voto

Md. Suman Kabir Points 2964

Voici la séquence complète pour 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

Donc, à partir de la liste ci-dessus, vous pouvez facilement comprendre la séquence d'exécution de GROUP BY, HAVING and WHERE qui est :

1.  WHERE
2.  GROUP BY
3.  HAVING

Pour en savoir plus, consultez le site de Microsoft

12voto

Matthias Meid Points 8473

On commence par WHERE, puis on GROUPE le résultat de la requête, et enfin on prend la clause HAVING pour filtrer le résultat groupé. C'est l'ordre "logique", je ne sais pas comment cela est techniquement mis en œuvre dans le moteur.

11voto

Il s'agit de l'ordre SQL d'exécution d'une requête,

enter image description here

Vous pouvez vérifier l'ordre d'exécution à l'aide des exemples suivants article .

Pour votre question, les lignes ci-dessous pourraient être utiles et proviennent directement de ce document. article .

  1. GROUP BY --> Les lignes restantes après l'application des contraintes WHERE sont ensuite regroupées en fonction des valeurs communes de la colonne spécifiée dans la clause GROUP BY. À la suite du regroupement, il n'y aura qu'autant de lignes que de valeurs uniques dans cette colonne. Implicitement, cela signifie que vous ne devez l'utiliser que lorsque vous avez des fonctions d'agrégation dans votre requête.

  2. HAVING --> Si la requête comporte une clause GROUP BY, les contraintes de la clause HAVING sont alors appliquées aux lignes groupées, en écartant les lignes groupées qui ne satisfont pas à la contrainte. Comme la clause WHERE, les alias ne sont pas non plus accessibles à partir de cette étape dans la plupart des bases de données.

Références:-

3voto

AdaTheDev Points 53358

Je pense que c'est implémenté dans le moteur comme l'a dit Matthias : OÙ, GROUPE PAR, AYANT

J'ai essayé de trouver une référence en ligne qui énumère la séquence complète (c'est-à-dire que "SELECT" se trouve tout en bas), mais je ne la trouve pas. Elle était détaillée dans un livre "Inside Microsoft SQL Server 2005" que j'ai lu il n'y a pas si longtemps, chez Solid Quality Learning.

Editar: J'ai trouvé un lien : http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X