重中之重---語句執(zhí)行順序

 

我們先看看語句的執(zhí)行順序

如果我沒記錯這是《SQL SERVER 2005技術(shù)內(nèi)幕--查詢》這本書的開篇第一章第一節(jié)。書的作者也要讓讀者首先了解語句是怎么樣的一個執(zhí)行順序,因?yàn)椴恢理樞蚝握剬憘€好語句?

 

查詢的邏輯執(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> 

 標(biāo)準(zhǔn)的SQL 的解析順序?yàn)?

 (1).FROM 子句 組裝來自不同數(shù)據(jù)源的數(shù)據(jù)

 (2).WHERE 子句 基于指定的條件對記錄進(jìn)行篩選

 (3).GROUP BY 子句 將數(shù)據(jù)劃分為多個分組

 (4).使用聚合函數(shù)進(jìn)行計算

 (5).使用HAVING子句篩選分組

 (6).計算所有的表達(dá)式

 (7).使用ORDER BY對結(jié)果集進(jìn)行排序

 

 

執(zhí)行順序:

 1.FROM:對FROM子句中前兩個表執(zhí)行笛卡爾積生成虛擬表vt1

 2.ON:對vt1表應(yīng)用ON篩選器只有滿足< join_condition> 為真的行才被插入vt2

 3.OUTER(join):如果指定了 OUTER JOIN保留表(preserved table)中未找到的行將行作為外部行添加到vt2 生成t3如果from包含兩個以上表則對上一個聯(lián)結(jié)生成的結(jié)果表和下一個表重復(fù)執(zhí)行步驟和步驟直接結(jié)束

 4.WHERE:對vt3應(yīng)用 WHERE 篩選器只有使< where_condition>

網(wǎng)友評論