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 並返回呼叫者