Trong cuốn sách Bên trong Microsoft SQL Server ™ 2005 T-SQL Truy vấn, tác giả Itzik Ben-Gan cho chúng tôi thứ tự hoặc SQL server xử lý truy vấn logic năm 2005 là:Confused về logic để xử lý truy vấn Itzik Ben-Gan trong mình SQL Server 2005 cuốn sách và SQL Server 2008 cuốn sách
(8) SELECT (9) DISTINCT (11) <TOP_specification> <select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) WITH {CUBE | ROLLUP}
(7) HAVING <having_condition>
(10) ORDER BY <order_by_list>
1. FROM
2. ON
3. OUTER (join)
4. WHERE
5. GROUP BY
6. CUBE | ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY <---------------------- NOTE
11. TOP <---------------------- NOTE
Trong cuốn sách của ông Bên trong Microsoft SQL server 2008: T-SQL truy vấn, ông cho chúng tôi biết logic để xử lý truy vấn sau đây:
(1) FROM
(1-J1) Cartesian Product
(1-J2) ON Filter
(1-J3) Add Outer Rows
(2) WHERE
(3) GROUP BY
(4) HAVING
(5) SELECT
(5-1) Evaluate Expressions
(5-2) DISTINCT
(5-3) TOP <---------------------- NOTE
(6) ORDER BY <---------------------- NOTE
Lưu ý thứ tự của TOP và ORDER BY trong trích đoạn trên từ những cuốn sách này. Họ chỉ là đối diện. Tôi nghĩ rằng hai bước này là rất quan trọng, và sẽ đưa ra một kết quả hoàn toàn khác với thứ tự khác nhau. Tôi muốn biết liệu SQL Server 2008 đã thay đổi một cái gì đó trong đó là công cụ lưu trữ từ SQL Server 2005 hoặc một cái gì đó khác gây ra điều này?
Cảm ơn.
Lưu ý rằng TOP sử dụng ORDER BY trong việc xác định các hàng cần giữ. Đây là mô hình xử lý logic - vì vậy việc nhận được các bản ghi TOP n dựa trên ORDER BY _logically_ không dẫn đến một rowset với một thứ tự cụ thể - bước lôgic ORDER BY yêu cầu kết quả. Về mặt xử lý vật lý, ORDER BY sẽ được thực hiện trước TOP n. –