SQL Select 語句完整的執行順序:
1、from 獲取不同數據庫表的數據;
2、where 子句跟隨篩選條件,對數據進行過濾;
3、group by 子句可以將數據根據分組字段進行分組處理;
4、可使用聚集函數對數據進行匯總計算;
5、可使用 having 子句篩選分組結果;
6、select 后面可設置返回的數據字段;
7、使用 order by 對結果集進行排序。
SQL 語言不同于其他編程語言的最明顯特征是處理代碼的順序。這是一種結構話查詢語言,在大多數據庫語言中,代碼按編碼順序被處理。但在 SQL 語句中,第一個被處理的子句式 FROM,而不是第一出現的 SELECT。SQL 查詢處理的步驟序號:
1.FROM 左表表名
2.<join_type> JOIN 右表表名
3.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
10.排序 ORDER BY <order_by_list>
11. <TOP_specification> <select_list>
以上每個步驟都會產生一個虛擬表,而該虛擬表又被用作下一個步驟的輸入。這些虛擬表對調用者(客戶端應用程序或者外部查詢)不可用。只有最后一步生成的表才會會給調用者。如果沒有在查詢中指定某一個子句,
將跳過相應的步驟。
邏輯查詢處理階段簡介:
1、 FROM:對 FROM 子句中的前兩個表執行查詢獲得笛卡爾積(交叉聯接),生成虛擬表 t1。
2、 ON:對 t1 應用 ON 條件,只有那些使為真才被插入到 t2。
3、 OUTER (JOIN):如果指定了 OUTER JOIN(相對于 CROSS JOIN 或 INNER JOIN),保留表中未找到匹配的行將作為外部行添加到 t2,生成 t3。如果 FROM 子句包含兩個以上的表,則對上一個聯接生成的
結果表和下一個表重復執行步驟 1 到步驟 3,直到處理完所有的表位置。