我有一个示例数据库,我正在使用它来学习SQL,我正在尝试编写一个查询来选择小狗,以便根据以下标准显示它知道的技巧:
狗id&名称 诡计与娱乐名称 学习日期&技能水平
以下是我的数据库图表的图片:
非常感谢任何帮助,提前谢谢
答案 0 :(得分:1)
首先,你永远不应该选择*(返回所有列),具体说明你想要的列。这样,将来,如果某个表发生更改并删除了列,它将立即崩溃,您将立即知道为什么失败与猜测相关。
接下来,在编写查询时,在表之间使用显式连接而不考虑条件。这只是你在SQL中知道关系如何工作......以下内容适用于你的图表。我正在使用“别名”(P代表小狗,PT代表puppy_trick等)来帮助简化查询的长输入。
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
注意我的格式/对齐方式。我发现它有助于将一个与另一个之间的关系看作一个链......你不能从Puppy到Kennel而不经过所有其他人。
现在,标准。一旦你掌握了如何获得a-b-c-d-e关系的基础,你在寻找什么。您可以通过将“AND”条件添加到表的相应联接来应用它。例如,如果您正在寻找“跳过箍”的技巧,那就是与Trick表相关联的实际描述,所以从上面
Join Trick T
on PT.TrickID = T.TrickID
AND T.TrickName = 'Jump through hoop'
如果你想要一个特定的小狗的东西,因为那是根级(即:查询中的第一个表),这将在所有上述结尾添加一个“WHERE”子句......
(因此,在加入Kennel之后)
JOIN Kennel K
on TK.TrickKennelID = K.TrickKennelID
WHERE
P.PuppyName = 'Spot'
答案 1 :(得分:0)
这是一个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个表。
答案 2 :(得分:0)
您需要使用链接表来加入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 *
选择您真正想要的字段。
答案 3 :(得分:0)
Select PuppyName, TrickName
From Puppy
Join Puppy_Trick
On Puppy.PuppyID = Puppy_Trick.PuppyID
Join Trick
On Puppy_Trick.PuppyTrickID = Trick.TrickID