La liste de sélection ne peut pas toujours être évaluée en dernier car ORDER BY peut utiliser des alias qui sont définis dans la liste de sélection et doivent donc être exécutés par la suite. Par exemple :
SELECT foo+bar foobar FROM table1 ORDER BY foobar
Je dirais qu'en général, l'ordre d'exécution pourrait ressembler à ceci :
- DE
- OÙ
- GROUPER PAR
- SÉLECTIONNER
- AVOIR
- COMMANDER PAR
Les clauses GROUP BY et WHERE pourraient être permutées sans changer le résultat, tout comme les clauses HAVING et ORDER BY.
En réalité les choses sont plus complexes car la base de données peut réordonner l'exécution selon différents plans d'exécution. Tant que le résultat reste le même, peu importe dans quel ordre il est exécuté.
Notez également que si un index est choisi pour la clause ORDER BY, les lignes peuvent déjà être dans le bon ordre lorsqu'elles sont lues à partir du disque. Dans ce cas, la clause ORDER BY n'est pas du tout exécutée.