SQL中的having子句和select子句,究竟哪個先執(zhí)行?

SQL中的having子句和select子句,究竟哪個先執(zhí)行?

sql執(zhí)行順序:having與select

sql語句中,先執(zhí)行哪一個子句,having還是select,一直以來是一個備受爭議的話題。

針對這個問題,傳統(tǒng)的觀點認為SQL會先執(zhí)行having子句,再執(zhí)行select子句。然而,有人提出疑問,這違背了SQL的邏輯。因為having子句依賴于select子句的結(jié)果,即分組后的匯總數(shù)據(jù)來進行篩選。那么,如果沒有select子句先查詢出數(shù)據(jù)來,having子句又如何進行篩選呢?

為了澄清這個疑問,我們重新審視select子句的作用。select子句并不是對數(shù)據(jù)進行操作,而是將選取的數(shù)據(jù)展示出來。它不參與數(shù)據(jù)處理和篩選的過程,因此不會影響having子句的執(zhí)行。

因此,SQL執(zhí)行的正確順序應(yīng)該是:

  1. Group by先進行分組。
  2. Sum()聚合函數(shù)計算每個組的總和。
  3. Having子句對子組總和結(jié)果進行篩選。
  4. Select將符合篩選條件的結(jié)果選擇性地展示出來。

所以,網(wǎng)上的答案是正確的,SQL中先執(zhí)行having子句,再執(zhí)行select子句。這并不矛盾,因為having子句并不依賴于select子句的執(zhí)行結(jié)果來進行篩選。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊7 分享