SQL查詢順序

  • (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>

FROM:對FROM子句中的前兩個表執行笛卡爾積(Cartesian product)(交叉聯接),生成虛擬表VT1 ON:對VT1應用ON篩選器。只有那些使<join_condition>爲真的行才被插入VT2。 OUTER(JOIN):如 果指定了OUTER JOIN(相對於CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部聯接把左表標記爲保留表,右外部聯接把右表標記爲保留表,徹底外部聯接把兩個表都標記爲保留表)中未找到匹配的行將做爲外部行添加到 VT2,生成VT3.若是FROM子句包含兩個以上的表,則對上一個聯接生成的結果表和下一個表重複執行步驟1到步驟3,直處處理完全部的表爲止。 WHERE:對VT3應用WHERE篩選器。只有使<where_condition>爲true的行才被插入VT4. GROUP BY:按GROUP BY子句中的列列表對VT4中的行分組,生成VT5. CUBE|ROLLUP:把超組(Suppergroups)插入VT5,生成VT6. HAVING:對VT6應用HAVING篩選器。只有使<having_condition>爲true的組纔會被插入VT7. SELECT:處理SELECT列表,產生VT8. DISTINCT:將重複的行從VT8中移除,產生VT9. ORDER BY:將VT9中的行按ORDER BY 子句中的列列表排序,生成遊標(VC10). TOP:從VC10的開始處選擇指定數量或比例的行,生成表VT11,並返回調用者。排序

相關文章
相關標籤/搜索