学生の名、姓、SID、メジャー、マイナーを表示しようとしています。各生徒のコース、CID、会議時間も同様です。ただし、ブリッジテーブルは私を混乱させます。Union または Multi-Table Join を実行するかどうか、または何を実行するかはわかりません。助けてください!
3 に答える
これは宿題なので、質問に直接答える代わりに、いくつかのヒントを提供します。
と を検討する必要がUNION
ありJOINs
ます。
UNION は、複数のクエリを同じデータセットで返す場合に使用されます。各フィールドのデータ型が類似していて、各クエリのフィールド数が同じである必要があります。したがって、この特定の質問では、を使用するのは理にかなっていUNION
ますか? 学生とそのコースを一列に並べたいので、おそらくそうではありません。
このタイプのクエリでは、JOIN
. オンラインで利用できる JOIN の非常に役立つ視覚的な説明があります。SQL を学習している間は、手元に置いておくことをお勧めします。
学生データとそのコース情報が必要なので、この 2 つを取得する唯一の方法は、tblRegistration
. このテーブルを使用すると、クエリで探している結果が得られるはずです。
編集:
UNION
コメンターが 2 番目の図面は ではないことを指摘しているので、JOIN
ここで私が同意しないのは、それを証明する例です。
上記の AUNION
は、2 つのクエリを 1 つの結果セットに結合します。UNIONデモを使用した sqlfiddle を次に示します。
FULL OUTER JOIN 結合条件を満たさない左または右のテーブルの行が結果セットに含まれ、もう一方のテーブルに対応する出力列が に設定されることを指定しNULL
ます。これは、 によって通常返されるすべての行に追加されますINNER JOIN
。FULL OUTER JOINデモを使用した sqlfiddle を次に示します。
ご覧のとおり、両方のクエリの製品は同じではないためFULL OUTER JOIN
、図の a は ではありませんUNION
。
SELECT *
FROM tblStudent AS s
LEFT OUTER JOIN tblRegistration AS r
ON s.SID = r.SID
LEFT OUTER JOIN tblCourse AS c
ON c.CID = r.CID
オラクルの構文:
SELECT stu.FirstName,
stu.LastName,
stu.Major,
stu.Minor,
reg.SID,
cou.CID,
cou.MeetingTime
FROM
tblStudent as stu,
tblRegistration as reg,
tblCourse as cou
WHERE
stu.SID(+) = reg.SID
and reg.CID = cou.CID