我有一個任務,我必須創建兩個表,名爲客戶和地址。這些表位於名爲HandsOnOne的數據庫中。SQL幫助從兩個表中選擇客戶信息
客戶已列標題是: CustomerID
,CustomerName
,CustomerAddressID
地址已列標題是: AddressID
,Street
,City
,State
,ZipCode
有其中一個外鍵關係AddressID
在地址表是初級ry鍵和CustomerAddressID
在客戶表是外鍵。
我用下面的代碼將值插入每個表:
USE HandsOnOne;
INSERT INTO Address (AddressID, Street, City, State, ZipCode)
VALUES (1, '2400 Broadway Drive', 'Missoula', 'MT', '59802'),
(2, '320 21st Street', 'Billings', 'MT', '59101'),
(3, '439 Skyline Blvd', 'Denver', 'CO', '80002'),
(4, '56 Park Avenue', 'New York', 'NY', '10001');
USE HandsOnOne;
INSERT INTO Customer (CustomerID, CustomerName, CustomerAddressID)
VALUES (1, 'Western Supply Company', 1),
(2, 'Nick Harper', 3),
(3, 'Alice Harper', 3),
(4, 'Abacus Consulting', 4);
從那裏,我必須根據一定的規範進行排序。第一個規範是列出城市和州的所有客戶,按照ZipCode
升序排列,然後由CustomerName
升序排列。
下面是我用這部分代碼:
USE HandsOnOne;
SELECT CustomerName, City, State
FROM Customer, Address
ORDER BY ZipCode ASC, CustomerName ASC;
當我執行這個代碼,我的回報是16個項目,而不是4,不知何故,每個客戶被分配每個地址,給我4個項目在每個地址。
下一個問題問我列出Street
,City
,State
,並且全部地址的ZipCode
沒有一個與之關聯的客戶。
此查詢應該返回320 21聖比林斯的地址,MT 59101因爲它AddressID
值並沒有在地址表中沒有CustomerAddressID
價值。但是,我執行此查詢時沒有收到任何結果。
我已驗證存在外鍵關係。我究竟做錯了什麼?
由於JohnHC已經給出了答案,我會補充一點:下圖對我幫助很大,當我開始使用連接:) http://3.bp.blogspot.com/-bC- tThYQxxU/UZy6wVYiZeI/AAAAAAAAAjM/A18S8PkK6Uo/s1600/SQL + JOINS.PNG – DenStudent
@DenStudent我在牆上有類似的東西 – JohnHC
[踢壞的習慣:使用舊式JOIN](http://sqlblog.com/blogs/ aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) - 舊式*逗號分隔的表*樣式列表被替換爲* proper * ANSI在ANSI - ** 92 ** SQL標準中使用'JOIN'語法(**超過20年**之前),並且不鼓勵使用它 –