1. 程式人生 > >Oracle SQL 執行順序

Oracle SQL 執行順序

--查詢的邏輯執行過程,來自技術內幕 

(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:對FROM子句中前兩個表執行笛卡爾積 生成虛擬表VT1 
2.ON:對VT1表應用ON篩選器 只有滿足 <join_condition>為真的行才被插入VT2 
3.OUTER(JOIN):如果指定了OUTER JOIN 保留表(preserved table)中未找到的行將行作為外部行新增到VT2 生成T3 
如果FROM包含兩個以上表 則對上一個聯結生成的結果表和下一個表重複執行步驟1和步驟3 直接結束 
4.WHERE:對VT3應用WHERE篩選器 只有使 <where_condition>為TRUE的行才被插入VT4 
5.GROUP BY:按GROUP BY子句中的列列表 對VT4中的行分組 生成VT5 
6.CUBE|ROLLUP:把超組(Supergroups)插入VT6 生成VT6 
7.HAVING:對VT6應用HAVING篩選器 只有使 <having_condition>為TRUE的組才插入VT7 
8.SELECT:處理SELECT列表 產生VT8 
9.DISTINCT:將重複的行從VT8中去除 產生VT9 
10.ORDER BY:將VT9的行按ORDER BY子句中的列列表排序 生成一個遊標 VC10 
11.TOP:從VC10的開始處選擇指定數量或比例的行 生成VT11 並返回呼叫者