Je suis juste confondu avec la séquence d'exécution d'une requête SQL lorsque nous utilisons GROUP BY et HAVING avec une clause WHERE. Lequel est exécuté en premier? Quelle est la séquence?
Je suis juste confondu avec la séquence d'exécution d'une requête SQL lorsque nous utilisons GROUP BY et HAVING avec une clause WHERE. Lequel est exécuté en premier? Quelle est la séquence?
Réponses:
en ordre:
FROM & JOIN s déterminent et filtrent les lignes
WHERE plus de filtres sur les lignes
GROUP BY combine ces lignes en groupes
HAVING filtres groupes
ORDER BY arrange les lignes / groupes restants
LIMIT filtres sur les lignes / groupes restants
SET SHOWPLAN_ALL ON
Voici la séquence complète pour le serveur 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
Ainsi, à partir de la liste ci-dessus, vous pouvez facilement comprendre la séquence d'exécution GROUP BY, HAVING and WHERE
dont:
1. WHERE
2. GROUP BY
3. HAVING
SELECT * FROM table1 INNER JOIN table2 ON col = col2 WHERE table1.col = @val
Ici ON vient après la jointure, et sélectionnez vient en premier, des explications?
FROM
abord, puis ON
et ainsi de suite.
WHERE est le premier, puis vous GROUP le résultat de la requête, et le dernier mais non le moindre HAVING-clause est prise pour filtrer le résultat groupé. C'est l'ordre "logique", je ne sais pas comment cela est techniquement implémenté dans le moteur.
Je pense qu'il est implémenté dans le moteur comme le disait Matthias: WHERE, GROUP BY, HAVING
J'essayais de trouver une référence en ligne qui répertorie la séquence entière (c'est-à-dire que "SELECT" vient tout en bas), mais je ne la trouve pas. Il a été détaillé dans un livre "Inside Microsoft SQL Server 2005" que j'ai lu il n'y a pas si longtemps, par Solid Quality Learning
Edit: J'ai trouvé un lien: http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx
Réfléchissez à ce que vous devez faire si vous souhaitez mettre en œuvre:
L'ordre est WHERE, GROUP BY et HAVING.
Dans l'ordre ci-dessous
Avoir la clause peut précéder / précéder la clause group by.
Exemple: sélectionnez * FROM test_std; ROLL_NO SNAME DOB ENSEIGNER
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 lignes sélectionnées.
sélectionnez Teach , count ( ) count à partir de test_std ayant count ( )> 1 group by TEACH;
ENSEIGNER LE NOMBRE
Langer 2 testaments 4
Il s'agit de l'ordre d'exécution SQL d'une requête,
Vous pouvez vérifier l'ordre d'exécution avec des exemples de cet article .
Pour votre question ci-dessous, les lignes peuvent être utiles et directement tirées de cet article .
- GROUP BY -> Les lignes restantes après l'application des contraintes WHERE sont ensuite regroupées en fonction des valeurs communes dans la colonne spécifiée dans la clause GROUP BY. En raison du regroupement, il y aura seulement autant de lignes qu'il y a de valeurs uniques dans cette colonne. Implicitement, cela signifie que vous ne devriez avoir besoin de l'utiliser que lorsque vous avez des fonctions d'agrégation dans votre requête.
- HAVING -> Si la requête a une clause GROUP BY, alors les contraintes de la clause HAVING sont alors appliquées aux lignes groupées, supprimez 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:-
SÉLECTIONNER
DES
JOINTS O
LE
GROUPE
EN PASSANT LA
COMMANDE PAR