1. 程式人生 > 其它 >MySQL 面試題:SQL

MySQL 面試題:SQL

SQL 的邏輯執行順序

每個操作都會產生一張虛擬表,該虛擬表作為一個處理的輸入。這些虛擬表對使用者是透明的,只有最後一步生成的虛擬表才會返回給使用者。如果沒有在查詢中指定某一子句,則將跳過相應的步驟
具體分析查詢處理的各個階段:

  1. FROM:對 FROM 子句中的左表<left_table>和右表<right_table>執行笛卡兒積(Cartesianproduct),產生虛擬表 VT1
  2. ON:對虛擬表 VT1 應用 ON 篩選,只有那些符合<join_condition>的行才被插入虛擬表 VT2 中
  3. JOIN:如果指定了 OUTER JOIN(如 LEFT OUTER JOIN、RIGHT OUTER JOIN),那麼保留表中未匹配的行作為外部行新增到虛擬表 VT2 中,產生虛擬表 VT3。如果 FROM 子句包含兩個以上表,則對上一個連線生成的結果表 VT3 和下一個表重複執行步驟 1)~步驟 3),直到處理完所有的表為止
  4. WHERE:對虛擬表 VT3 應用 WHERE 過濾條件,只有符合<where_condition>的記錄才被插入虛擬表 VT4 中
  5. GROUP BY:根據 GROUP BY 子句中的列,對 VT4 中的記錄進行分組操作,產生 VT5
  6. CUBE|ROLLUP:對錶 VT5 進行 CUBE 或 ROLLUP 操作,產生表 VT6HAVING:對虛擬表 VT6 應用
  7. HAVING 過濾器,只有符合<having_condition>的記錄才被插入虛擬表 VT7 中。
  8. SELECT:第二次執行 SELECT 操作,選擇指定的列,插入到虛擬表 VT8 中
  9. DISTINCT:去除重複資料,產生虛擬表 VT9
  10. ORDER BY:將虛擬表 VT9 中的記錄按照<order_by_list>進行排序操作,產生虛擬表 VT10。11)11.
  11. LIMIT:取出指定行的記錄,產生虛擬表 VT11,並返回給查詢使用者