以MySQL為例宪摧,SQL查詢的關鍵詞的執(zhí)行順序如下:
? 1. from(含子查詢)台腥,from是查詢的開端烫止,首先需要知道最開始從哪個表開始的,確定數(shù)據(jù)源疾棵。
? 2. join戈钢,如果from后面是多張表,join關聯(lián)是尔,會首先對前兩個表執(zhí)行一個笛卡爾乘積殉了,這時候就會生成第一個虛擬表T1
? 3. on,對虛表T1進行on篩選嗜历,只有那些符合的行才會被記錄在虛表T2中宣渗。
? 4. where,對虛擬表T2進行where條件過濾梨州。只有符合的記錄才會被插入到虛擬表T3中痕囱。
? 5. group by,子句將T3中的唯一的值組合成為一組暴匠,得到虛擬表T4鞍恢。
? 6. avg,sum…等聚合函數(shù),聚合函數(shù)只是對分組的結果進行一些處理每窖,拿到某些想要的聚合值帮掉,例如求和,統(tǒng)計數(shù)量等窒典,并不生成虛擬表蟆炊。
? 7. having,應用having篩選器瀑志,生成T5涩搓。having子句主要和group by子句配合使用,having篩選器是第一個也是為唯一一個應用到已分組數(shù)據(jù)的篩選器劈猪。
? 8. select昧甘,執(zhí)行select操作,選擇指定的列战得,插入到虛擬表T6中充边。
? 9. distinct,對T6中的記錄進行去重常侦。移除相同的行浇冰,產(chǎn)生虛擬表T7。
? 10.order by聋亡,應用order by子句肘习。按照order_by_condition排序T7,此時返回的一個游標杀捻,而不是虛擬表井厌。
? 11.limit蚓庭,取出指定行的記錄,產(chǎn)生虛擬表T8, 并將結果返回仅仆。