sql >> Databasteknik >  >> RDS >> Mysql

MySQL-förfrågan/klausulexekveringsorder

Själva utförandet av MySQL-satser är lite knepigt. Standarden specificerar dock tolkningsordningen för element i frågan. Detta är i princip i den ordning du anger, även om jag tror att HAVING och GROUP BY kan komma efter SELECT :

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

Detta är viktigt för att förstå hur frågor analyseras. Du kan inte använda ett kolumnalias definierat i en SELECT i WHERE sats, till exempel, eftersom WHERE tolkas före SELECT . Å andra sidan kan ett sådant alias finnas i ORDER BY klausul.

När det gäller det faktiska utförandet är det verkligen upp till optimeraren. Till exempel:

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

och

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

båda har effekten av ORDER BY exekveras inte alls -- och exekveras därför inte efter GROUP BY (i det första fallet är effekten att sorteringen tas bort från GROUP BY och i den andra blir effekten att inte göra något mer än GROUP BY gör det redan).



  1. Varför behandlar Oracle 9i en tom sträng som NULL?

  2. UNPIVOT på ett obestämt antal kolumner

  3. Hur man listar filer i en mapp med SQL Server

  4. Skriver i ExcelSheet med UTL_FILE-paketet i Oracle