SQL查詢語句是非常頻繁使用的語句,所以我們有必要理解一下它的執(zhí)行順序。剛接觸SQL的朋友可以先大概了解下,以后慢慢對SQL理解后再往回看一下就容易明白。 查詢邏輯執(zhí)行順序 (8)SELECT (9)DISTINCT (11)<Top Num><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> 執(zhí)行順序解析 1. FROM:對FROM子句中前兩個(gè)表執(zhí)行笛卡爾積生成虛擬表vt1 2. ON: 對vt1表應(yīng)用ON篩選器只有滿足 join_condition 為真的行才被插入vt2 3. OUTER(join):如果指定了 OUTER JOIN保留表(preserved table)中未找到的行將行作為外部行添加到vt2,生成t3,如果from包含兩個(gè)以上表,則對上一個(gè)聯(lián)結(jié)生成的結(jié)果表和下一個(gè)表重復(fù)執(zhí)行步驟和步驟直接結(jié)束。 4. WHERE:對vt3應(yīng)用 WHERE 篩選器只有使 where_condition 為true的行才被插入vt4 5. GROUP BY:按GROUP BY子句中的列列表對vt4中的行分組生成vt5 6. CUBE|ROLLUP:把超組(supergroups)插入vt6,生成vt6 7. HAVING:對vt6應(yīng)用HAVING篩選器只有使 having_condition 為true的組才插入vt7 8. SELECT:處理select列表產(chǎn)生vt8 9. DISTINCT:將重復(fù)的行從vt8中去除產(chǎn)生vt9 10. ORDER BY:將vt9的行按order by子句中的列列表排序生成一個(gè)游標(biāo)vc10 11. TOP:從vc10的開始處選擇指定數(shù)量或比例的行生成vt11 并返回調(diào)用者 
|