2015-09-28 49 views
0

我期待在從W3Schools的例子我應該考慮關於連接的分組?

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate 
FROM Orders 
INNER JOIN Customers 
ON Orders.CustomerID=Customers.CustomerID; 

,我想知道我應該如何組在我腦海中的條款。據我所知,每個SQL查詢都會返回一個表,查詢中的子句本身可能會返回一個表。所以我覺得整個

Orders INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID 

的作爲是一個表,我通過應用SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate它返回它的一個子表。這是考慮事情的正確方法嗎?

+0

你說: '作爲一個表,我通過應用 SELECT Orders.OrderID,Customers.CustomerName,Orders.OrderDate' 第一部分是正確的返回它的一個子表。但我不會說你是從它返回一個子表。你只是抓住你想要的列 – Coffee

+0

是的。想象它的最好方法是通過在數據庫中創建表並逐個從兩個表中選擇*並查看數據。然後使用連接以及它如何改變輸出。在所有這些專欄中,只需查看您需要的一個。 如果您的系統上沒有安裝任何db,請使用網頁或http://sqlfiddle.com/上的「Head first SQL」。一旦你開始選擇表格並開始放置條件和連接並以可視方式查看輸出,那麼你將會有更多的理解。 – Utsav

+0

看看是否有幫助:http://stackoverflow.com/questions/3841295/sql-using-alias-in-group-by/3841485#3841485 – mustaccio

回答

1

您可以將每個查詢想象爲按照您想要的結果組成新的臨時表。這一次從OrdersCustomers需要行,匹配他們根據兩個表中的CustomerID領域(的加盟on條款),然後從OrdersOrderIDOrderDate)和Customers一個字段返回只是幾個字段(CustomerName) 。

1

基本上,您正在返回一個包含SELECT語句中所有列的新表。如果將查詢簡化爲:

SELECT OrderID, OrderDate 
FROM Orders 

您將打印輸出整個訂單表,但只顯示您指定的兩列。

使用您的INNER JOIN,您將篩選出的結果僅包含Customer ID與具有相同CustomerID的Customers表中的相似行相匹配的Orders。並且在您的SELECT語句中,您將添加一個顯示與這些訂單匹配的客戶名稱的列。

因此,INNER JOIN的ON部分只是將客戶與其各自的訂單進行匹配。 SELECT部分​​就是您要創建新輸出表的地方,其中包含您感興趣的三列。

這有幫助嗎?

相關問題