SELECT sal
FROM emp e
WHERE 5 >= (SELECT COUNT(sal)
FROM emp a
WHERE a.sal <= e.sal)
ORDER BY sal;
我知道我們會得到至少五個人。但是查詢究竟執行得如何?我無法理解。請幫助我任何人都可以解釋這個SQL查詢中究竟發生了什麼?
SELECT sal
FROM emp e
WHERE 5 >= (SELECT COUNT(sal)
FROM emp a
WHERE a.sal <= e.sal)
ORDER BY sal;
我知道我們會得到至少五個人。但是查詢究竟執行得如何?我無法理解。請幫助我任何人都可以解釋這個SQL查詢中究竟發生了什麼?
此查詢具有所謂的相關子查詢。您可以將查詢視爲運行兩個嵌套循環,遍歷從emp
開始的所有可能的行對。下面是它的心臟:
WHERE a.sal <= e.sal
e
從外SELECT
(FROM emp e
)指定的行,而a
從嵌套SELECT
(FROM emp a
)指定的行。該條件使得嵌套查詢計算所有行數小於外部查詢的行的emp
行。外部查詢包括低薪工資低於或等於五時的工資。
請注意,具有相同工資的行將被多次計數,這可能會減少返回集中的行數。例如,如果有六個薪水相同的底薪人員,則查詢將返回一組空行。您可以使用DISTINCT
來更改此行爲。
它總是幫助全看執行計劃,查看查詢將如何執行的,請通過圖像去了解查詢將如何運行
你可以通過下面的鏈接查找更多關於sql查詢執行計劃
感謝您的回答。但是我不明白這句話:「當低薪水數低於或等於五時,外部查詢包括薪水。」但在外部查詢中,我們使用5> =。在內部查詢中,我計算婆婆每當a.sal <= e.sal意味着我總是隻能獲得更高的薪水。那麼外部查詢在低於5的情況下如何包含sal。實際上它應該提供更高的薪水。我無法理解我在錯誤的方向思考,請糾正我 –