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

ORDER BY、GROUP BY、HAVING 三大子句用法差異與執行順序完整解析

     編輯:Oracle 資料庫基礎

核心定義

子句用途關鍵限制
ORDER BY結果集排序預設 ASC;需明確列出排序欄位,可多欄位
GROUP BY分群彙總需搭配聚合函數;SELECT 非聚合欄位必須出現在 GROUP BY 列表
HAVING群組過濾在 GROUP BY 之後、ORDER BY 之前;可使用聚合函數

標準 SQL 執行順序

SELECT select_list
FROM table_source
WHERE search_condition
GROUP BY group_by_expression
HAVING search_condition
ORDER BY order_expression

GROUP BY 必備原則

SELECT 清單中未使用聚合函數的欄位,必須出現在 GROUP BY 之後。

錯誤範例:

SELECT A, B FROM tbl GROUP BY A;  -- B 未聚合也未分群

正確寫法:

SELECT A, COUNT(B) AS cnt FROM tbl GROUP BY A;

WHERE vs HAVING 差異

  • WHERE:分群前過濾列,不可使用聚合函數。
  • HAVING:分群後過濾群組,常搭配聚合函數。
-- 正確:HAVING 使用聚合
SELECT A, COUNT(B) FROM tbl GROUP BY A HAVING COUNT(B) > 2;

效能建議

WHERE 於結果集產生前執行,HAVING 於結果集產生後迴圈處理,能用 WHERE 解決的絕不使用 HAVING。

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