0

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

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

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

数据库图

非常感谢任何帮助,在此先感谢

4

4 回答 4

1

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

接下来,在编写查询时,在表之间使用显式连接,而不考虑条件。这只是为了让您了解 SQL 中的关系是如何工作的……以下内容适用于您的图表。我正在使用“别名”(P 表示小狗,PT 表示小狗技巧等)来帮助简化查询的长输入。

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。

现在,标准。一旦你了解了如何获得 abcde 关系,你在寻找什么。您可以通过将“AND”条件添加到表的相应连接来应用它。例如,如果您正在寻找“Jump through hoop”的技巧,它与实际描述的技巧表相关联,所以从上面

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'
于 2012-12-01T22:39:41.013 回答
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 个表。

于 2012-12-01T22:25:14.900 回答
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 *选择您真正想要的字段。

于 2012-12-01T22:25:59.643 回答
0
 Select PuppyName, TrickName
 From Puppy 
 Join Puppy_Trick
 On Puppy.PuppyID = Puppy_Trick.PuppyID
 Join Trick
 On Puppy_Trick.PuppyTrickID = Trick.TrickID
于 2012-12-01T22:27:56.810 回答