繁体   English   中英

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

[英]SQL Query: Complex Inner Joins and Outer Joins

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

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

首先,您在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语句),您将得到一条针对每把狗的每把戏的一行。

第二个查询我将留给您找出答案。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM