這也是一篇不完全的翻譯,有興趣的讀者可以查看原文。
下面的SQL語句的執行順序只是邏輯上的順序,在實際中優化器會選擇最省時省力的順序:
- FROM:這個只需要說一點的是JOIN這一步包含在FROM裏面,總之就是先確定表,加載所有表的所有行
- WHERE:過濾掉不需要的行
- GROUP BY:根據表達式或者列名來聚合(分組),分組完成後,所有的列只剩下了作爲組名的列,組內部只對聚合函數可見。
- 聚合函數:聚合函數相當於可以進入分組的內部,然後計算出一個只有一個值的結果,例如組內的最大最小平均總和。
- HAVING:過濾掉聚合後的不需要的行
- 窗口函數:在此時的所有行開窗口,並在窗口內執行窗口函數
- SELECT:選擇需要的列,也叫project,投射
- DISTINCT:在選擇的列裏面進行(xing)行(hang)去重
- UNION,INTERSECT,EXCEPT:對得到的結果進行集合操作
- ORDEY BY:對進行完集合操作後得到的結果集排序
- OFFECT:沒見過,不知道是幹嘛的,別人說“Don’t use offset”
- LIMIT,FETCH,TOP:最後選擇前幾行作爲最終的結果