Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Ordem de avaliação da cláusula Oracle SQL


A lista de seleção nem sempre pode ser avaliada por último, pois o ORDER BY pode usar aliases que são definidos na lista de seleção, portanto, devem ser executados posteriormente. Por exemplo:
SELECT foo+bar foobar FROM table1 ORDER BY foobar

Eu diria que em geral a ordem de execução poderia ser algo assim:
  • DE
  • ONDE
  • GRUPO POR
  • SELECIONAR
  • TER
  • ORENDER POR

As cláusulas GROUP BY e WHERE podem ser trocadas sem alterar o resultado, assim como HAVING e ORDER BY.

Na realidade, as coisas são mais complexas porque o banco de dados pode reordenar a execução de acordo com diferentes planos de execução. Contanto que o resultado permaneça o mesmo, não importa em que ordem ele é executado.

Observe também que, se um índice for escolhido para a cláusula ORDER BY, as linhas já poderão estar na ordem correta quando forem lidas do disco. Neste caso, a cláusula ORDER BY não é realmente executada.