SQL Ordre logique du traitement des requêtes en SQL


Exemple

/*(8)*/  SELECT /*9*/ DISTINCT /*11*/ TOP  
/*(1)*/  FROM 
/*(3)*/        JOIN 
/*(2)*/       ON 
/*(4)*/  WHERE 
/*(5)*/  GROUP BY 
/*(6)*/  WITH {CUBE | ROLLUP}
/*(7)*/  HAVING 
/*(10)*/ ORDER BY 
/*(11)*/ LIMIT 

L'ordre dans lequel une requête est traitée et la description de chaque section.

VT signifie «Virtual Table» et montre comment différentes données sont générées lors du traitement de la requête.

  1. FROM: Un produit cartésien (jointure croisée) est exécuté entre les deux premières tables de la clause FROM et, par conséquent, la table virtuelle VT1 est générée.

  2. ON: Le filtre ON est appliqué à VT1. Seules les lignes pour lesquelles le est TRUE sont insérées dans VT2.

  3. OUTER (join): si un joint OUTER JOIN est spécifié (par opposition à un CROSS JOIN ou un INNER JOIN), les lignes de la ou des tables conservées pour lesquelles une correspondance n'a pas été trouvée sont ajoutées aux lignes de VT2 en tant que lignes externes, générant VT3. Si plus de deux tables apparaissent dans la clause FROM, les étapes 1 à 3 sont appliquées de manière répétée entre le résultat de la dernière jointure et la table suivante de la clause FROM jusqu'à ce que toutes les tables soient traitées.

  4. WHERE: Le filtre WHERE est appliqué à VT3. Seules les lignes pour lesquelles la valeur est TRUE sont insérées dans VT4.

  5. GROUP BY: les lignes de VT4 sont organisées en groupes en fonction de la liste de colonnes spécifiée dans la clause GROUP BY. VT5 est généré.

  6. CUBE | ROLLUP: Des supergroupes (groupes de groupes) sont ajoutés aux lignes de VT5, générant VT6.

  7. HAVING: Le filtre HAVING est appliqué à VT6. Seuls les groupes pour lesquels le est TRUE sont insérés dans VT7.

  8. SELECT: la liste SELECT est traitée, générant VT8.

  9. DISTINCT: les lignes dupliquées sont supprimées de VT8. VT9 est généré.

  10. ORDER BY: Les lignes de VT9 sont triées en fonction de la liste de colonnes spécifiée dans la clause ORDER BY. Un curseur est généré (VC10).

  11. TOP: Le nombre ou le pourcentage de lignes spécifié est sélectionné depuis le début de VC10. La table VT11 est générée et renvoyée à l'appelant. LIMIT a la même fonctionnalité que TOP dans certains dialectes SQL tels que Postgres et Netezza.