sql >> Database >  >> RDS >> Oracle

Oracle SQL-clausule evaluatievolgorde

De selectielijst kan niet altijd als laatste worden geëvalueerd omdat ORDER BY aliassen kan gebruiken die in de selectielijst zijn gedefinieerd, zodat deze daarna moeten worden uitgevoerd. Bijvoorbeeld:

SELECT foo+bar foobar FROM table1 ORDER BY foobar

Ik zou zeggen dat de volgorde van uitvoering in het algemeen ongeveer als volgt zou kunnen zijn:

  • VAN
  • WAAR
  • GROEPEREN OP
  • SELECTEER
  • HEBBEN
  • BESTEL DOOR

De clausules GROUP BY en WHERE kunnen worden verwisseld zonder het resultaat te wijzigen, evenals de clausules HAVING en ORDER BY.

In werkelijkheid zijn de zaken complexer omdat de database de uitvoering kan herschikken volgens verschillende uitvoeringsplannen. Zolang het resultaat hetzelfde blijft, maakt het niet uit in welke volgorde het wordt uitgevoerd.

Merk ook op dat als een index wordt gekozen voor de ORDER BY-component, de rijen al in de juiste volgorde kunnen staan ​​wanneer ze van schijf worden gelezen. In dit geval wordt de ORDER BY-component helemaal niet uitgevoerd.



  1. Waarom wordt casten van float naar varchar afgerond in SQL Server?

  2. Selecteer een willekeurige rij uit een PostgreSQL-tabel met gewogen rijkansen

  3. PostgreSQL kan geen transacties beginnen/beëindigen in PL/pgSQL

  4. Het sneeuwvlokschema