MySQL - 語句執行順序

1.順序

  1. FROM
  2. ON
  3. JOIN
  4. WHERE
  5. GROUP BY (開始使用SELECT中的別名,後面的語句中均可以使用)
  6. ROLLUP, CUBE, AVG, SUM ...
  7. HAVING
  8. SELECT
  9. DISTINCT
  10. ORDER BY
  11. TOP, LIMIT

 

2.解析

  1. FORM:對FROM的左邊的表和右邊的表計算笛卡爾積。產生虛表VT1
  2. ON:對虛表VT1進行ON篩選,只有那些符合<join-condition>的行纔會被記錄在虛表VT2中。
  3. JOIN:若是指定了OUTER JOIN(好比left join、 right join),那麼保留表中未匹配的行就會做爲外部行添加到虛擬表VT2中,產生虛擬表VT3。from子句中包含兩個以上的表的話,那麼就會對上一個join鏈接產生的結果VT3和下一個表重複執行步驟1~3這三個步驟,一直處處理完全部的表爲止。
  4. WHERE:對虛擬表VT3進行WHERE條件過濾。只有符合<where-condition>的記錄纔會被插入到虛擬表VT4中。
  5. GROUP BY:根據group by子句中的列,對VT4中的記錄進行分組操做,產生VT5.
  6. ROLLUP | CUBE:對錶VT5進行cube或者rollup操做,產生表VT6.
  7. HAVING:對虛擬表VT6應用having過濾,只有符合<having-condition>的記錄纔會被 插入到虛擬表VT7中。
  8. SELECT: 執行select操做,選擇指定的列,插入到虛擬表VT8中。
  9. DISTINCT: 對VT8中的記錄進行去重。產生虛擬表VT9.
  10. ORDER BY: 將虛擬表VT9中的記錄按照<order_by_list>進行排序操做,產生虛擬表VT10.
  11. TOP | LIMIT:取出指定行的記錄,產生虛擬表VT11, 並將結果返回。
相關文章
相關標籤/搜索