在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)該是:
- Group by先進行分組。
- Sum()聚合函數(shù)計算每個組的總和。
- Having子句對子組總和結(jié)果進行篩選。
- Select將符合篩選條件的結(jié)果選擇性地展示出來。
所以,網(wǎng)上的答案是正確的,SQL中先執(zhí)行having子句,再執(zhí)行select子句。這并不矛盾,因為having子句并不依賴于select子句的執(zhí)行結(jié)果來進行篩選。
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END