2012-12-12 202 views
1

大家好我目前正在研究一個SQL示例項目,試圖學習一般的SQL和內部外部聯接的基礎知識。SQL查詢:複雜的內部聯接和外部聯接

這是我目前的數據庫圖表:

http://imgur.com/z0Ger

我目前停留在那我有麻煩寫作2個不同的查詢。

1. Given a puppy name show all the tricks it knows. 

Include: 
Dog id & name 
Trick id & name 
Date learned & skill level 

2. Given a kennel show all the puppies that have been there to learn a trick. 

Include: 
Kennel id & name 
Date learned & trick id 
Dog id & dog name 

我真的很難過這些,真的很感激它,如果你能幫助我找到正確的答案。任何幫助表示讚賞。謝謝

+0

這應該是可以沒有連接(只使用WHERE子句);必須加入嗎? – RonaldBarzell

+0

數據庫設計看起來是錯誤的。交界處應該是狗狗和狗狗,狗狗應該連接到狗舍,除非訣竅同時在兩個地方?之後,它只是一對內連接。 –

+0

@ user1161318:如何在不加入連接的情況下顯示來自不同表格的數據? –

回答

0

首先,你有一個缺少的Junction_Table和技巧之間的foriegn鍵,但既然你得到了其他人,我認爲你可以解決這個問題。

二,學習日期和技能水平屬於聯結表,而不是技巧表,因爲這些都是狗,狗窩&的組合功能,而不是技巧。

有固定的是,第一個查詢給所有的狗&招數是:

SELECT d.Dog_ID 
     ,d.Dog_Name 
     ,t.Trick_ID 
     ,t.Trick_Name 
     ,j.Skill_Level 
     ,j.Date_Learned 
FROM Dogs d 
     INNER JOIN 
     Junction_Table j ON d.Dog_ID=j.Dog_ID 
     INNER JOIN 
     Tricks t ON t.Trick_ID=j.Trick_ID 

這些會給你通過每學到的所有技巧做到這一點已經學會至少一招。

如果您將狗和Junction_Table之間的INNER JOIN更改爲LEFT JOIN,您將獲得以上所有內容以及沒有任何技巧的狗。

如果您將其更改爲RIGHT JOIN,您將獲得帶有1+技巧和所有技巧的狗,包括那些沒有狗的技巧。

如果您將其更改爲FULL JOIN,您會從Dogs and Tricks中獲得任何回報。

如果您將其更改爲CROSS JOIN(並刪除了ON語句),您將得到一條針對每條狗每條狗的線。

第二個查詢一個我會留給你弄清楚。

關於連接沒有任何棘手的問題 - 首先從所有表中的字段開始,然後通過連接工作,將它們連接在一起。