Eksekusi sebenarnya dari pernyataan MySQL agak rumit. Namun, standar tidak menentukan urutan interpretasi elemen dalam kueri. Ini pada dasarnya dalam urutan yang Anda tentukan, meskipun menurut saya HAVING
dan GROUP BY
bisa muncul setelah SELECT
:
FROM
klausaWHERE
klausaSELECT
klausaGROUP BY
klausaHAVING
klausaORDER BY
klausa
Ini penting untuk memahami bagaimana kueri diuraikan. Anda tidak dapat menggunakan alias kolom yang ditentukan dalam SELECT
di WHERE
klausa, misalnya, karena WHERE
diuraikan sebelum SELECT
. Di sisi lain, alias seperti itu dapat berada di ORDER BY
klausa.
Adapun eksekusi aktual, itu benar-benar diserahkan kepada pengoptimal. Misalnya:
. . .
GROUP BY a, b, c
ORDER BY NULL
dan
. . .
GROUP BY a, b, c
ORDER BY a, b, c
keduanya memiliki efek ORDER BY
tidak dieksekusi sama sekali -- jadi tidak dieksekusi setelah GROUP BY
(dalam kasus pertama, efeknya adalah menghapus pengurutan dari GROUP BY
dan yang kedua efeknya tidak lebih dari GROUP BY
sudah melakukannya).