Oracle
 sql >> Base de données >  >> RDS >> Oracle

Ordre d'évaluation des clauses Oracle SQL

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
  • 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.