0

SQLを学習するために使用しているサンプルデータベースがあり、子犬を選択するクエリを作成して、次の基準で認識されているトリックを表示しようとしています。

犬のIDと名前トリックのIDと名前学習日とスキルレベル

これが私のデータベース図の写真です:

dbdiagram

どんな助けでも本当にありがたいです、事前に感謝します

4

4 に答える 4

1

まず、select * (すべての列を返す) を実際に行うべきではありません。必要な列を特定してください。このようにして、将来、テーブルが変更されて列が削除された場合、すぐにクラッシュし、推測ではなく何かが失敗した理由がすぐにわかります。

次に、クエリの作成時に、条件を考慮せずにテーブル間の明示的な結合を使用します。これは、SQL でリレーションシップがどのように機能するかを知っているためです。次の図は、図で機能します。「エイリアス」(puppy の場合は P、puppy_trick の場合は 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

私が持っているフォーマット/配置に注意してください。ある犬から次の犬への関係をチェーンとして見るのに役立つことがわかりました... 他のすべてを通過せずにパピーから犬小屋にたどり着くことはできません。

さて、基準。abcde関係を取得する基本的な方法がわかったら、何を探していますか。テーブルへのそれぞれの結合に「AND」条件を追加することで、これを適用できます。例えば「フープをくぐる」のトリックを探している場合、それは実際の説明のトリック表に関連付けられているので、上記から

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
 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 に答える
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

パピーテーブルとトリックテーブルを結合するには、リンクテーブルを使用する必要があります...

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 に答える