oracle之group by,having和where的區別

花花蘑菇發表於2016-11-18
我個人的理解如下:
group by,having已經where這三個子句的執行順序是有區別的:
先執行where子句,對符合條件的資料進行刪選
然後執行group by子句,對刪選出來的結果集進行分組
最後執行having子句,對分組後的結果集再次進行篩選。

這樣就很好理解為什麼帶有聚合函式(sum,min,max,avg,count)的查詢條件只能使用在having子句,而不能在where子句中,因為它違背了執行順序。
必須在分組以後,計算出結果集,然後才能對相應的結果集進行進一步的篩選。

在oracle中,group by 有一個原則,就是 select 後面的所有列中,沒有使用聚合函式的列,必須出現在 group by 後面。
但是在mysql中,是沒有這樣的限制的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28497416/viewspace-2128716/,如需轉載,請註明出處,否則將追究法律責任。

相關文章