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
klausulWHERE
klausulSELECT
klausulGROUP BY
klausulHAVING
klausulORDER 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).