MySQL - 語句執行順序
1.順序
FROM
ON
JOIN
WHERE
GROUP BY (開始使用SELECT中的別名,後面的語句中均可以使用)
ROLLUP, CUBE, AVG, SUM ...
HAVING
SELECT
DISTINCT
ORDER BY
TOP, LIMIT
2.解析
FORM:對FROM的左邊的表和右邊的表計算笛卡爾積。產生虛表VT1
ON:對虛表VT1進行ON篩選,只有那些符合<join-condition>的行纔會被記錄在虛表VT2中。
JOIN:若是指定了OUTER JOIN(好比left join、 right join),那麼保留表中未匹配的行就會做爲外部行添加到虛擬表VT2中,產生虛擬表VT3。from子句中包含兩個以上的表的話,那麼就會對上一個join鏈接產生的結果VT3和下一個表重複執行步驟1~3這三個步驟,一直處處理完全部的表爲止。
WHERE:對虛擬表VT3進行WHERE條件過濾。只有符合<where-condition>的記錄纔會被插入到虛擬表VT4中。
GROUP BY:根據group by子句中的列,對VT4中的記錄進行分組操做,產生VT5.
ROLLUP | CUBE:對錶VT5進行cube或者rollup操做,產生表VT6.
HAVING:對虛擬表VT6應用having過濾,只有符合<having-condition>的記錄纔會被 插入到虛擬表VT7中。
SELECT: 執行select操做,選擇指定的列,插入到虛擬表VT8中。
DISTINCT: 對VT8中的記錄進行去重。產生虛擬表VT9.
ORDER BY: 將虛擬表VT9中的記錄按照<order_by_list>進行排序操做,產生虛擬表VT10.
TOP | LIMIT:取出指定行的記錄,產生虛擬表VT11, 並將結果返回。
歡迎關注本站公眾號,獲取更多信息