作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个用于学习 SQL 的示例数据库,并尝试编写一个查询来选择小狗,以根据以下条件显示它所知道的技巧:
狗的 ID 和名称技巧 ID 和名称学习日期和技能水平
这是我的数据库图表的图片:
非常感谢任何帮助,提前致谢
最佳答案
首先,您永远不应该真正执行 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/
我是一名优秀的程序员,十分优秀!