Mysql SQL幼犬数据库:尝试使用内部联接进行特定查询,卡住了吗?
我有一个用于学习SQL的示例数据库,并尝试编写一个查询来选择puppies,以显示它知道的技巧,给定以下条件: 狗的id和名字 技巧id和名称 学习日期和技能水平 以下是我的数据库关系图的图片:Mysql SQL幼犬数据库:尝试使用内部联接进行特定查询,卡住了吗?,mysql,database,Mysql,Database,我有一个用于学习SQL的示例数据库,并尝试编写一个查询来选择puppies,以显示它知道的技巧,给定以下条件: 狗的id和名字 技巧id和名称 学习日期和技能水平 以下是我的数据库关系图的图片: 非常感谢您的帮助,请提前感谢这里是一个SQL查询: SELECT * From Puppy As p, Trick as t, Pappy_Trick as pt Where p.PuppyID = pt.PuppyId AND t.TrickID = pt.TrickID AND p.Puppy
非常感谢您的帮助,请提前感谢这里是一个SQL查询:
SELECT *
From Puppy As p, Trick as t, Pappy_Trick as pt
Where
p.PuppyID = pt.PuppyId AND t.TrickID = pt.TrickID
AND p.PuppyID = 'value' AND PuppyName = 'value' AND t.TrickID = 'value' AND TrickName = 'value' AND DateLearned = 'value' AND SkillLevel = 'value';
重要的是where子句中的第一个条件
p.PuppyID = pt.PuppyId AND t.TrickID = pt.TrickID
这有助于链接3个表。您需要使用链接表来加入Puppy和Trick表
SELECT *
FROM Puppy AS P
INNER JOIN Puppy_Trick AS PT ON P.PuppyID = PT.PuppyID
INNER JOIN Trick AS T ON T.TrickID = PT.TrickID
然后,选择实际需要的字段,而不是
选择*
首先,您永远不应该真正执行select*(返回所有列),具体指定您想要的列。这样,在将来,如果一个表发生更改并且列被删除,它将立即崩溃,您将立即知道为什么有些东西失败了,而不是猜测
Select PuppyName, TrickName
From Puppy
Join Puppy_Trick
On Puppy.PuppyID = Puppy_Trick.PuppyID
Join Trick
On Puppy_Trick.PuppyTrickID = Trick.TrickID
接下来,在编写查询时,在表之间使用显式联接,而不考虑任何条件。这只是为了让您了解SQL中的关系是如何工作的。。。以下内容适用于您的图表。我使用“别名”(P代表puppy,PT代表puppy_技巧,等等)来帮助简化查询的长键入
select
P.puppyID,
P.PuppyName,
P.Breed,
PT.TrickID,
PT.SkillLevel,
PT.DateLearned,
T.TrickName,
TK.KennelName,
TK.KennelAddress
from
Puppy P
JOIN Puppy_Trick PT
on P.PuppyID = PT.PuppyID
JOIN Trick T
on PT.TrickID = T.TrickID
JOIN Trick_Kennel TK
on T.TrickID = TK.TrickID
JOIN Kennel K
on TK.TrickKennelID = K.TrickKennelID
请注意我的格式/对齐方式。我发现这有助于将一个关系视为一条链条。。。你不可能从小狗到狗窝不经过所有其他的
现在,标准。一旦你掌握了如何获得a-b-c-d-e关系的基本方法,你在寻找什么。您可以通过将“和”条件添加到表的相应联接来应用该条件。例如,如果您正在寻找“跳过篮圈”的技巧,这与实际描述的技巧表相关联,因此从上面
Join Trick T
on PT.TrickID = T.TrickID
AND T.TrickName = 'Jump through hoop'
如果你想为一只特定的小狗做点什么,因为那是根级别(即:查询中的第一个表),那就需要在上面所有内容的末尾添加一个“WHERE”子句
(因此,在加入犬舍后)
我不知道从哪里开始我知道我需要做一些内部连接,但是这个概念让人困惑,你还坚持这个问题吗?如果有人提供了答案或有帮助的回答,请注明。它将帮助我们帮助您获得所需的答案。
JOIN Kennel K
on TK.TrickKennelID = K.TrickKennelID
WHERE
P.PuppyName = 'Spot'