1

大家好,我目前正在做一个 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

我真的对这些感到困惑,如果您能帮助我找到正确的答案,我将不胜感激。任何帮助表示赞赏。谢谢

4

1 回答 1

0

首先,您在 Junction_Table 和 Tricks 之间缺少一个外键,但是由于您将其他键包含在内,因此我认为您可以解决此问题。

其次,学习日期和技能水平属于联结表,而不是技巧表,因为这些是狗,狗窝和技巧的组合,而不是单独的技巧。

解决了这个问题,第一个给所有狗和技巧的查询是:

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 语句),您将得到一条针对每只狗的线来对抗每一个技巧。

第二个查询我会让你弄清楚。

连接没有什么棘手的 - 从所有表中您需要的字段开始,然后通过连接将它们联系在一起。

于 2012-12-12T01:47:27.310 回答