1? (8)SELECT? (9) DISTINCT (11)
2 ?(1) ?FROM
3 ?(3) JOIN
4 ?(2) ON
5 ?(4) WHERE
6 ?(5) GROUP BY
7 ?(6) WITH {CUBE | ROLLUP}
8 ?(7) HAVING
9 (10) ORDER BY
以上每個步驟都會產(chǎn)生一個虛擬表,該虛擬表被用作下一個步驟的輸入。這些虛擬表對調用者(客戶端應用程序或者外部查詢)不可用。只有最后一步生成的表才會會給調用者桂对。如果沒有在查詢中指定某一個子句,將跳過相應的步驟矾利。
邏輯查詢處理階段簡介:
1尤揣、 FROM:對FROM子句中的前兩個表執(zhí)行笛卡爾積(交叉聯(lián)接)业筏,生成虛擬表VT1。
2匆赃、 ON:對VT1應用ON篩選器淤毛,只有那些使為真才被插入到TV2。
3炸庞、 OUTER (JOIN):如果指定了OUTER JOIN(相對于CROSS JOIN或INNER JOIN),保留表中未找到匹配的行將作為外部行添加到VT2荚斯,生成TV3埠居。如果FROM子句包含兩個以上的表,則對上一個聯(lián)接生成的結果表和下一個表重復執(zhí)行步驟1到步驟3事期,直到處理完所有的表位置滥壕。
4、 WHERE:對TV3應用WHERE篩選器兽泣,只有使為true的行才插入TV4绎橘。
5、 GROUP BY:按GROUP BY子句中的列列表對TV4中的行進行分組唠倦,生成TV5称鳞。
6、 CUTE|ROLLUP:把超組插入VT5稠鼻,生成VT6冈止。
7、 HAVING:對VT6應用HAVING篩選器候齿,只有使為true的組插入到VT7熙暴。
8、 SELECT:處理SELECT列表慌盯,產(chǎn)生VT8周霉。
9、 DISTINCT:將重復的行從VT8中刪除亚皂,產(chǎn)品VT9俱箱。
10、ORDER BY:將VT9中的行按ORDER BY子句中的列列表順序灭必,生成一個游標(VC10)匠楚。
11、TOP:從VC10的開始處選擇指定數(shù)量或比例的行厂财,生成表TV11芋簿,并返回給調用者。