我知道連接2個表。但是,當涉及到加入3個或更多表格時,我想到以下問題。這些可能看起來很基本,但如果有人解釋它會很棒。
涉及超過2個表連接的概念SQL JOIN問題
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID=Orders.CustomerID
LEFT JOIN Regions ON Orders.RegionID = Regions.RegionID;
問題1:
LEFT JOIN Regions ON Orders.RegionID = Regions.RegionID
這是否加入出現在結果集的
注意我已經通過鏈接Understanding how JOIN works when 3 or more tables are involved. [SQL]
查詢的問題1 & 2不見了第一次加入?
問題2:如果什麼條件爲:
LEFT JOIN Regions ON Customers.RegionID = Regions.RegionID
現在會發生什麼?這個連接發生在什麼結果集上?它是否發生在'客戶'結果集或第一個連接結果集上?
查詢問題3:
SELECT count(distinct Customers.CustomerName), count(Orders.OrderID), count(Regions.RegionID)
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID=Orders.CustomerID
LEFT JOIN Regions ON Orders.RegionID = Regions.RegionID;
問題3:
會的結果而變化。如果加入順序將被逆轉嗎?在哪種情況下會有所不同?
查詢的問題4:
SELECT count(Regions.RegionID)
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID=Orders.CustomerID
LEFT JOIN Regions ON Orders.RegionID = Regions.RegionID;
問題4:(這是我得到的最困惑)
當談到聚合,應該是什麼表名在FROM?它依賴於要彙總的table.column嗎? 對於問題的假設,假設2個連接是必需的,我們只需要計數(RegionID)。
我認爲是這樣的:連接將首先創建一個包含所有組合的結果集(即Customers x訂單x地區)與所有表中的列。然後'ON' +'WHERE'過濾結果。 – adrianm
根據定義,join * always *涉及多個表。沒有「連接單個表」(即使您使用同一個表兩次,仍然是兩個表的連接) –
@adrianm想象一下,包含數百萬行的表。壞事,對吧?索引是魔術詞。在構建結果集之前進行過濾,然後通過WHERE過濾。 – fancyPants