gpt4 book ai didi

mysql - SQL Puppy 数据库 : Trying to make a specific query using inner joins, 卡住了?

转载 作者:行者123 更新时间:2023-11-29 14:09:57 25 4
gpt4 key购买 nike

我有一个用于学习 SQL 的示例数据库,并尝试编写一个查询来选择小狗,以根据以下条件显示它所知道的技巧:

狗的 ID 和名称技巧 ID 和名称学习日期和技能水平

这是我的数据库图表的图片:

dbdiagram

非常感谢任何帮助,提前致谢

最佳答案

首先,您永远不应该真正执行 select * (返回所有列),具体说明您想要的列。这样,将来如果表发生更改并删除列,它将立即崩溃,您将立即知道为什么失败而不是猜测。

接下来,在编写查询时,在表之间使用显式联接,而不考虑任何条件。这只是为了让您了解 SQL 中的关系如何工作...以下内容将适用于您的图表。我使用“别名”(P 代表 puppy,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

注意我的格式/对齐方式。我发现它有助于将从一个到下一个的关系视为一条链条......如果不经过所有其他人,你就无法从小狗到狗窝。

现在,标准。一旦你掌握了如何建立 a-b-c-d-e 关系的基本知识,你就在寻找什么。您可以通过将“AND”条件添加到表的相应联接来应用它。例如,如果您正在寻找“Jump through hohoo”的技巧,则该技巧与实际描述的技巧表相关联,因此从上面

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'

关于mysql - SQL Puppy 数据库 : Trying to make a specific query using inner joins, 卡住了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13664308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com