Ordre de résolution des requête SQL

Fondamental

L'ordre de résolution standard d'une requête SQL est  :

  1. FROM

  2. WHERE

  3. GROUP BY

  4. HAVING

  5. SELECT

  6. ORDER BY

AttentionUsage des alias dans le GROUP BY ou le HAVING : requête non standard, acceptée par certains SGBD

1
SELECT substring(name,1,1) AS initiale, count(citycode)
2
FROM city
3
GROUP BY initiale;
1
 initiale | count 
2
----------+-------
3
 L        |     1
4
 Z        |     1
5
 B        |     1
6
 M        |     1
7
 P        |     2
8
 A        |     1
9

La requête n'est pas standard, les résolutions de l'alias et de la fonction substring sont dans le SELECT, qui est postérieur à la résolution du GROUP BY. Postgres acceptera néanmoins cette syntaxe, ce qui évite de créer une vue ou d'utiliser une sous-requête.

RemarqueRestriction

Une restriction peut être appliquée avant calcul de l'agrégat, au niveau de la clause WHERE, portant ainsi sur la relation de départ, mais aussi après calcul de l'agrégat sur les résultats de ce dernier, au niveau de la clause HAVING.

RemarqueUtilisation de fonctions d'agrégation

Les fonctions d'agrégation peuvent être utilisées dans la claude HAVING ou dans la clause ORDER BY. Les fonctions ne peuvent pas être utilisées dans la clause WHERE (qui est résolu avant le GROUP BY).