Việc thực thi các câu lệnh MySQL thực tế là một chút khó khăn. Tuy nhiên, tiêu chuẩn không chỉ định thứ tự diễn giải của các phần tử trong truy vấn. Về cơ bản, điều này theo thứ tự mà bạn chỉ định, mặc dù tôi nghĩ rằng HAVING
và GROUP BY
có thể đến sau SELECT
:
-
FROM
mệnh đề -
WHERE
mệnh đề -
SELECT
mệnh đề -
GROUP BY
mệnh đề -
HAVING
mệnh đề -
ORDER BY
mệnh đề
Điều này rất quan trọng để hiểu cách các truy vấn được phân tích cú pháp. Bạn không thể sử dụng bí danh cột được xác định trong SELECT
trong WHERE
chẳng hạn như mệnh đề vì WHERE
được phân tích cú pháp trước SELECT
. Mặt khác, bí danh như vậy có thể nằm trong ORDER BY
mệnh đề.
Đối với việc thực thi thực tế, điều đó thực sự phụ thuộc vào trình tối ưu hóa. Ví dụ:
. . .
GROUP BY a, b, c
ORDER BY NULL
và
. . .
GROUP BY a, b, c
ORDER BY a, b, c
cả hai đều có tác dụng của ORDER BY
hoàn toàn không được thực thi - và do đó không được thực thi sau GROUP BY
(trong trường hợp đầu tiên, tác động là xóa sắp xếp khỏi GROUP BY
và thứ hai, hiệu quả là không làm gì khác hơn là GROUP BY
đã làm).