sql >> Database teknologi >  >> RDS >> Mysql

MySQL forespørgsel / klausul udførelsesrækkefølge

Selve udførelsen af ​​MySQL-sætninger er lidt vanskelig. Standarden specificerer dog rækkefølgen af ​​fortolkning af elementer i forespørgslen. Dette er dybest set i den rækkefølge, du angiver, selvom jeg tror HAVING og GROUP BY kunne komme efter SELECT :

  • FROM klausul
  • WHERE klausul
  • SELECT klausul
  • GROUP BY klausul
  • HAVING klausul
  • ORDER BY klausul

Dette er vigtigt for at forstå, hvordan forespørgsler parses. Du kan ikke bruge et kolonnealias defineret i en SELECT i WHERE klausul, for eksempel fordi WHERE er parset før SELECT . På den anden side kan et sådant alias være i ORDER BY klausul.

Hvad angår den faktiske udførelse, er det virkelig overladt til optimeringsværktøjet. For eksempel:

. . . GROUP BY a, b, c ORDER BY NULL

og

. . . GROUP BY a, b, c ORDER BY a, b, c

begge har virkningen af ​​ORDER BY bliver slet ikke eksekveret -- og derfor ikke udført efter GROUP BY (i det første tilfælde er effekten at fjerne sortering fra GROUP BY og i den anden er effekten ikke at gøre mere end GROUP BY allerede gør).



  1. oracle 12c - vælg streng efter sidste forekomst af et tegn

  2. Masseindsæt datafiler i SQL Server

  3. Kan ikke oprette forbindelse til server - En netværksrelateret eller instansspecifik fejl

  4. PostgreSQL's date_trunc i mySQL