首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

SQL 執行順序解析:SELECT-FROM-WHERE-GROUP BY-HAVING-ORDER BY 真實執行流程

     編輯:MySQL 綜合教學

SQL 執行順序解析:SELECT-FROM-WHERE-GROUP BY-HAVING-ORDER BY 真實執行流程

SQL 書寫順序 ≠ 執行順序。理解真實流程是寫出高效查詢、正確使用別名、避開邏輯錯誤的關鍵。

關鍵字書寫順序(語法規定)

SELECT select_list
FROM table_source
WHERE search_condition
GROUP BY group_by_expression
HAVING search_condition
ORDER BY order_expression [ASC|DESC]

SELECT、FROM 必選,其餘可選。

真實執行順序(邏輯處理流程)

  1. FROM:確定數據源(表、視圖、連接結果)
  2. WHERE:行級過濾,裁剪參與後續處理的行數
  3. GROUP BY:分組,聚合函數作用於各組
  4. HAVING:組級過濾,針對聚合結果
  5. SELECT:投影,確定輸出列(含別名、表達式、聚合結果)
  6. ORDER BY:排序最終結果集(可用 SELECT 別名)

關鍵推論

  • WHERE **不能**用聚合函數/別名(尚未執行 SELECT)
  • HAVING **可以**用聚合函數/別名(SELECT 已執行)
  • ORDER BY **可以**用別名(SELECT 已執行)
  • GROUP BY、ORDER BY 可用列序號(ORDER BY 1),但不推薦

連接與條件解析順序

  • FROM 後表關聯:優化器按**自右向左**解析(舊版本規則),現代優化器動態決定驅動表
  • WHERE 條件:優化器按**自下而上**評估(舊版本),現代優化器根據代價模型重排
  • 寫法建議:大表放右側(舊版本)、高選擇性條件靠前(現代優化器會自動優化,但好習慣有益)

實戰案例

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved