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 ?
Réponses
Trop de publicités?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
Il s'agit de l'ordre SQL d'exécution d'une requête,
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 .
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.
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:-
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
- Réponses précédentes
- Plus de réponses