從算法過程來看,包含平等條件的這個WHERE
子句有困難。 (我想我無法得到下面的SQL語法,因爲我無法真正描繪WHERE carrier= f.carrier
子句按照算法一步一步運行的過程(就像我看到結果集表以及它如何在順序))where子句平等理解
SELECT id
FROM flights AS f
WHERE distance < (SELECT AVG(distance)
FROM flights
WHERE carrier = f.carrier);
所以,按照我的理解,運行carrier=f.carrier
的過程是這樣:
- 因爲它是一個相關子查詢,計算機從外部子開始,這意味着它只需第一行在一個航班表中,然後進入內部子查詢。
- 在內部子查詢中,它會嘗試查找外部子查詢的第一行數據的相同載體,並查找該特定載體距離的平均值。它將平均值與外部子查詢的第一行記錄進行比較並返回結果。它會這樣做直到它完成整個表。
我對序列過程的理解是否正確?非常感謝您的閱讀!
你的解釋對我來說是正確的。你還有其他問題要問嗎? –
你的解釋是正確的。對於您運行「EXPLAIN PLAN」或查看查詢計劃(取決於您的RDBMS,術語,確切的語法和輸出會有所不同)來查看數據庫如何解釋和處理查詢可能會有所幫助。 – alroc
'EXPLAIN'永遠有用。只需在'EXPLAIN'前加上你的查詢,你就可以看到查詢計劃,它將向你展示如何搜索每個表以及使用哪些索引。這非常方便。 – Matt