1

こんにちは、私は現在 SQL サンプル プロジェクトに取り組んでおり、SQL の基本と一般的な内部外部結合を学ぼうとしています。

これは私の現在のデータベース図です:

http://imgur.com/z0Ger

現在、書き込みに問題がある2つの異なるクエリで立ち往生しています。

1. Given a puppy name show all the tricks it knows. 

Include:
Dog id & name
Trick id & name
Date learned & skill level

2. Given a kennel show all the puppies that have been there to learn a trick.

Include:
Kennel id & name
Date learned & trick id
Dog id & dog name

私は本当にこれらに困惑しており、正しい答えに導く手助けができれば本当に感謝しています. どんな助けでも大歓迎です。ありがとう

4

1 に答える 1

0

まず、Junction_Table と Tricks の間に外部キーがありませんが、他のキーを取得したので、これを修正できると思います。

次に、学んだ日付とスキル レベルは、トリック テーブルではなく、ジャンクション テーブルに属します。これは、トリックだけではなく、犬、犬小屋、トリックの組み合わせの機能であるためです。

それを修正したので、すべての犬とトリックを与える最初のクエリは次のとおりです。

SELECT  d.Dog_ID
       ,d.Dog_Name
       ,t.Trick_ID
       ,t.Trick_Name
       ,j.Skill_Level
       ,j.Date_Learned
FROM   Dogs d
       INNER JOIN
       Junction_Table j ON d.Dog_ID=j.Dog_ID
       INNER JOIN
       Tricks t ON t.Trick_ID=j.Trick_ID

これらは、少なくとも 1 つのトリックを習得したすべての do によって習得されたすべてのトリックを提供します。

Dogs と Junction_Table の間の INNER JOIN を LEFT JOIN に変更すると、上記のすべてに加えて、トリックのない犬が得られます。

これを RIGHT JOIN に変更すると、トリックが 1 つ以上ある犬と、犬がいないものを含むすべてのトリックが得られます。

FULL JOIN に変更すると、Dogs and Tricks からすべてを取得できます。

これを CROSS JOIN に変更すると (そして ON ステートメントを削除すると)、すべてのトリックに対してすべての犬の行が表示されます。

2番目のクエリは、あなたに理解してもらいます。

結合に関して難しいことは何もありません。すべてのテーブルから必要なフィールドから始めて、それらを結び付けるために接続を進めていきます。

于 2012-12-12T01:47:27.310 に答える