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 必選,其餘可選。
真實執行順序(邏輯處理流程)
- FROM:確定數據源(表、視圖、連接結果)
- WHERE:行級過濾,裁剪參與後續處理的行數
- GROUP BY:分組,聚合函數作用於各組
- HAVING:組級過濾,針對聚合結果
- SELECT:投影,確定輸出列(含別名、表達式、聚合結果)
- ORDER BY:排序最終結果集(可用 SELECT 別名)
關鍵推論
WHERE **不能**用聚合函數/別名(尚未執行 SELECT)
HAVING **可以**用聚合函數/別名(SELECT 已執行)
ORDER BY **可以**用別名(SELECT 已執行)
GROUP BY、ORDER BY 可用列序號(ORDER BY 1),但不推薦
連接與條件解析順序
- FROM 後表關聯:優化器按**自右向左**解析(舊版本規則),現代優化器動態決定驅動表
- WHERE 條件:優化器按**自下而上**評估(舊版本),現代優化器根據代價模型重排
- 寫法建議:大表放右側(舊版本)、高選擇性條件靠前(現代優化器會自動優化,但好習慣有益)
實戰案例