web-dev-qa-db-fra.com

Quelle est la séquence d'exécution de la clause Group By, Having et Where dans SQL Server?

Je suis simplement confus 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?

76
Aarti

en ordre:

FROM&JOINs détermine et filtre les lignes
OÙplusieurs filtres sur les lignes
GROUP BY combine ces lignes en groupes
AYANTfiltre les groupes
ORDER BY arrange les lignes/groupes restants
LIMITEfiltres sur les lignes/groupes restants

151
KM.

WHERE est le premier, alors vous groupez le résultat de la requête, et enfin, la clause HAVING sert à filtrer le résultat groupé. C'est l'ordre "logique", je ne sais pas comment cela est techniquement implémenté dans le moteur.

7
Matthias Meid

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

Donc, dans 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

Obtenir plus d'informations à ce sujet de Microsoft

6
Md. Suman Kabir

Je pense que cela est implémenté dans le moteur, comme Matthias l’a dit: O GROUP, GROUP BY BY

J'essayais de trouver une référence en ligne répertoriant la séquence complète ("SELECT" apparaît tout en bas), mais je ne parviens pas à la trouver. 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: Trouvé un lien: http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx

2
AdaTheDev

En dessous de l'ordre

  1. DE & JOIN
  2. OÙ
  3. PAR GROUPE
  4. AYANT
  5. SELECT
  6. COMMANDÉ PAR
  7. LIMITE
1
GimmicksWorld

Dans Oracle 12c, vous pouvez exécuter le code dans l’une des deux séquences suivantes:

Where
Group By
Having

Ou

Where 
Having
Group by
1
Jim Chen

Pensez à ce que vous devez faire si vous souhaitez mettre en œuvre:

  • OÙ: Son besoin d'exécuter les opérations JOIN.
  • GROUP BY : Vous spécifiez Group by pour "grouper" les résultats sur la jointure, puis après l'opération JOIN, après l'utilisation de WHERE.
  • HAVING: HAVING sert à filtrer comme le dit l'expression GROUP BY. Ensuite, il est exécuté après le GROUP BY.

La commande est WHERE, GROUP BY et HAVING.

1
FerranB

Avoir Clause peut venir avant/avant le groupe par clause.

Exemple: Sélectionnez * FROM test_std; ROLL_NO SNAME DOB TEACH 


     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 avec count ()> 1group by TEACH;

COMPTE D'ENSEIGNEMENT


Langer 2 Wills 4

0
manoj remala