重中之重---語句執(zhí)行順序
我們先看看語句的執(zhí)行順序
如果我沒記錯這是《SQL SERVER 2005技術內幕--查詢》這本書的開篇第一章第一節(jié)。書的作者也要讓讀者首先了解語句是怎么樣的一個執(zhí)行順序,因為不知道順序何談寫個好語句?
查詢的邏輯執(zhí)行順序:
(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>
(8) SELECT (9) DISTINCT (11) < top_specification> < select_list>
(10) ORDER BY < order_by_list>
標準的SQL 的解析順序為:
(1).FROM 子句 組裝來自不同數據源的數據
(2).WHERE 子句 基于指定的條件對記錄進行篩選
(3).GROUP BY 子句 將數據劃分為多個分組
(4).使用聚合函數進行計算
(5).使用HAVING子句篩選分組
(6).計算所有的表達式
(7).使用ORDER BY對結果集進行排序
執(zhí)行順序:
1.FROM:對FROM子句中前兩個表執(zhí)行笛卡爾積生成虛擬表vt1
2.ON:對vt1表應用ON篩選器只有滿足< join_condition> 為真的行才被插入vt2
3.OUTER(join):如果指定了 OUTER JOIN保留表(preserved table)中未找到的行將行作為外部行添加到vt2 生成t3如果from包含兩個以上表則對上一個聯結生成的結果表和下一個表重復執(zhí)行步驟和步驟直接結束
4.WHERE:對vt3應用 WHERE 篩選器只有使< where_condition>