星期五, 4月 18, 2014

[SQL] WHERE 和 HAVING 差異

WHERE 和 HAVING 都具有篩選資料的功能,但使用時機和方式,卻是有差異

MSDN WHERE 定義
指定查詢所傳回之資料列的搜尋條件。
MSDN HAVING 定義
指定群組或彙總的搜尋條件。 HAVING 只能搭配 SELECT 陳述式使用。 HAVING 通常用在 GROUP BY 子句中。當未使用 GROUP BY 時,HAVING 的行為會如同 WHERE 子句
WHERE 和 HAVNG 差異
  1. SELECT、FROM、WHERE、GROUP BY 和 HAVING 的 T-SQL 邏輯順序來看,順序分別為
    1. FROM
    2. WHERE
    3. GROUP BY
    4. HAVING
    5. SELECT
    WHERE 在 GROUP BY 之前,而 HAVING 在 GROUP BY 之後
  2. WHERE 無法對彙總欄位進行篩選,但 HAVING 可以
  3. HAVING 通常搭配 GROUP BY 來對彙總資料進行篩選
MSDN 範例

找出金額超過 100,000 的訂單
USE AdventureWorks2012
GO

SELECT 
  SalesOrderID, 
  SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING SUM(LineTotal) > 100000.00
ORDER BY SalesOrderID

沒有留言:

張貼留言