可能重複的區別:
SQL: What’s the difference between HAVING and WHERE?是什麼WHERE和HAVING
我正在學習SQL語法,我無法理解這一點。
問題的後半部分更具技術性。 WHERE和HAVING之間的數據庫幕後究竟發生了什麼?哪一個使用更多資源?它們只是適用於不同的數據集的算法是相同的嗎?
謝謝!
可能重複的區別:
SQL: What’s the difference between HAVING and WHERE?是什麼WHERE和HAVING
我正在學習SQL語法,我無法理解這一點。
問題的後半部分更具技術性。 WHERE和HAVING之間的數據庫幕後究竟發生了什麼?哪一個使用更多資源?它們只是適用於不同的數據集的算法是相同的嗎?
謝謝!
其中在大多數查詢中,並限制了查詢關心的記錄。
有中使用「集團通過」查詢,並呼籲分組結果的行爲。
認爲Where
條款首先發生。如果數據庫中有1000條記錄,那麼where子句可能使它只有80個問題。假設Group By
子句將這80個數據庫記錄分組到(例如)15個聚合記錄集行中。如果沒有Having子句,則會返回所有這15個聚合行。 Having
子句if用於過濾這15個聚合行。
假設你想要一個來自德克薩斯州去年超過5份訂單的客戶名單。
Where
子句從得克薩斯州獲得所有從去年的訂單被人們Group By
子句組中的所有訂單由客戶(在你的SELECT子句一個Count(OrderID) As OrderCount
)Having
條款將列出的客戶限制爲擁有5個或更多訂單的客戶。其中用於直接在表格中過濾行。 用於在聚合行被分組之後對其進行過濾。
它們都是條件運算符,但HAVING只涉及GROUP BY語句上的聚合函數。
例如,
SELECT *
FROM users
WHERE username = 'bob'
將返回使用用戶名'bob'的所有用戶。
SELECT username, COUNT(*)
FROM users
GROUP BY username
HAVING COUNT(*) > 1
將返回哪些用戶名已被多次使用。
WHERE
對由FROM
連接產生的行進行過濾。 Check out this example。HAVING
過濾聚合GROUP BY
後返回的行。結帳this example。WHERE
用於過濾和ANSI-89語法 - 連接表。您可以而不是在WHERE
子句中使用集合函數(MIN,MAX,COUNT等)。 IE:
WHERE x.col = 1 -- valid
WHERE COUNT(*) > 1 -- invalid
HAVING
子句也用於過濾,但您只能使用聚合函數進行過濾。 IE:
HAVING COUNT(*) > 1 -- valid
HAVING x.col = 1 -- invalid
的HAVING
子句只能定義如果GROUP BY
條款已被定義 - 您可以使用,如果既DISTINCT
或OVER
(解析函數)不使用HAVING
條款。 HAVING
子句總是在GROUP BY
之後定義。
我一直認爲它是:HAVING是將哪些行分組到哪裏。
重複的問題。我想了很多遍。例如:http://stackoverflow.com/questions/287474/sql-whats-the-difference-between-having-and-where – mjv 2010-03-10 00:30:10
我們不是'擁有'更多!這是'WHERE'你需要看看:http://stackoverflow.com/questions/287474/sql-whats-the-difference-between-having-and-where ;-) – mjv 2010-03-10 00:33:25