我認爲以下幾點應該解決您的問題。
USE SalesLT
SELECT
c.LastName,
c.FirstName,
c.CompanyName,
ca.AddressType,
a.AddressLine1,
a.City,
a.StateProvince
FROM
Customer c
JOIN
CustomerAddress ca
ON c.CustomerID=ca.CustomerID
JOIN
Address a
ON ca.AddressID=a.AddressID
WHERE
c.FirstName = 'Virginia'
AND c.LastName = 'Miller'
當構建一個SQL查詢時,我發現最好從我的主表中選擇我想要的數據開始。所以在這個查詢的情況下,你正在尋找關於某個特定客戶的信息(在這個例子中你已經給出了它的弗吉尼亞米勒)。所以只要獲得關於該客戶的信息,查詢就會像這樣。
USE SalesLT
SELECT
c.LastName,
c.FirstName
FROM
Customer c
WHERE
c.FirstName = 'Virginia'
AND c.LastName = 'Miller'
所以,你做了什麼有開始以表示你將要使用的數據庫(這是USE SalesLT線)。這將有助於打字,因此您無需在每個表名稱前添加它。
接下來,您正在選擇您感興趣的列名(姓氏和名字)。他們有「c」。在他們面前指定表格的暱稱或「別名」,我們說SQL可以找到該數據。
在「FROM」行中,您可以看到您告訴SQL查看客戶表,並且您將爲該表提供「c」的別名,以便您可以快速引用它並清楚哪些列屬於查詢中的哪些表。
既然你已經拿到了弗吉尼亞米勒的數據,讓我們看看下一篇文章。您需要弗吉尼亞州的地址,以便您需要某種方式將地址數據與客戶數據相關聯。
幸運的是,AdventureWorks數據庫很容易做到,因爲它們具有CustomerAddress「join」表。這樣的表格旨在簡化具有某些類型的ID列的兩個表之間的鏈接記錄。在這種情況下,它將CustomerID(Customer表中的一列)和AddressID(Address表中的一列)鏈接起來,以便我們可以計算出特定客戶可能擁有的地址。
因此,現在我們知道我們將需要CustomerAddress中的數據,因此我們應該將下一部分添加到我們的查詢中。
USE SalesLT
SELECT
c.LastName,
c.FirstName,
c.CompanyName,
ca.AddressType
FROM
Customer c
JOIN
CustomerAddress ca
ON c.CustomerID=ca.CustomerID
WHERE
c.FirstName = 'Virginia'
AND c.LastName = 'Miller'
在上面的代碼中的新作品是除了從CustomerAddress表中選擇地址類型,然後告訴SQL如何Customer表和CustomerAddress表中相關的。它可以在它們之間加入記錄,因爲Customer表中的CustomerID等於CustomerAddress表中的客戶ID(JOIN CustomerAddress ca ON c.CustomerID = ca.CustomerID)。 「ca」是我們給予CustomerAddress表的別名或別名,所以我們使用它來在查詢中的任何其他地方引用它。
現在我們已經有了這部分查詢的工作,我們已準備好在最後階段獲取實際的地址信息。
USE SalesLT
SELECT
c.LastName,
c.FirstName,
c.CompanyName,
ca.AddressType
FROM
Customer c
JOIN
CustomerAddress ca
ON c.CustomerID = ca.CustomerID
JOIN
Address a
ON a.AddressID = ca.AddressID
WHERE
c.FirstName = 'Virginia'
AND c.LastName = 'Miller'
最後一步只是添加了Address表與CustomerAddress表相關的附加信息。基本上CustomerAddress中的AddressID列等於Address中的AddressID列。
現在我們回到原始查詢並提供我們想要的所有信息,表SQL可以找到該數據以及我們在這些表之間定義的關係。
一步步解決問題通常是一個好方法。
你的「發件人」行應該只有一個表中列出。「連接」行是告訴SQL你想從中獲取信息的附加表。 那到底是什麼問題?你解釋了你想要的,但不是你嘗試了什麼,或者你有什麼錯誤或問題。 – 2012-03-18 03:15:14
對不起,我得到了太多的行,我只能從查詢中得到2個結果。我有這個可怕的時間,並試圖讓理智。 – 2012-03-18 03:21:17
查詢看起來是正確的,列出的行如選擇下的所有行。我希望那是從它的方式?爲了顯示我在查詢中需要什麼?這是連接表的作用嗎?對不起,我很困惑,但是非常感謝你幫助我。 – 2012-03-18 03:24:17