SQL查询:复杂的内部联接和外部联接

时间:2012-12-12 01:03:53

标签: sql inner-join outer-join

大家好,我目前正在研究一个SQL示例项目,试图了解一般的SQL和内部外连接的基础知识。

这是我目前的数据库图表:

http://imgur.com/z0Ger

我目前遇到了两个不同的问题,我在编写时遇到了问题。

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

我真的很难过这些,如果你能帮助我找到正确的答案,我会非常感激。任何帮助表示赞赏。感谢

1 个答案:

答案 0 :(得分:0)

首先,你在Junction_Table和Tricks之间缺少一个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

这些将为你提供所学到的所有技巧,至少有一个技巧。

如果您将Dogs和Junction_Table之间的INNER JOIN更改为LEFT JOIN,那么您将获得以上所有内容以及没有技巧的狗。

如果你把它更改为RIGHT JOIN,那么你会得到1 +技巧的狗和所有技巧,包括那些没有狗的技巧。

如果你将它改为FULL JOIN,你可以从Dogs and Tricks那里得到一些东西。

如果您将其更改为CROSS JOIN(并删除了ON语句),您将获得针对每个技巧的每条狗的一行。

第二个问题我将让你弄明白。

关于连接没有什么棘手的问题 - 从所有表格中的所需字段开始,然后通过连接将它们连接在一起。