我正在尝试显示学生的名字,姓氏,SID,专业和辅修。以及每个学生的课程,CID和会议时间。 Bridge表让我感到困惑。喜欢是做联盟还是多桌加入或者是什么。请帮助!
答案 0 :(得分:3)
由于这是作业,而不是直接回答你的问题,我会给你一些提示。
您应该考虑审核UNION
和JOINs
。
当您希望在同一数据集中返回多个查询时,将使用UNION。它们必须在每个字段中具有相似的数据类型,并且每个查询中的字段数相同。因此对于这个特定问题,使用UNION
是否有意义?可能不是,因为你想让学生和他们的课程排成一排。
对于此类查询,您需要JOIN
。在线提供了一个非常有用的JOIN视觉解释。我建议您在学习SQL时随时帮助您。
A Visual Explanation of SQL Joins
由于您需要学生数据及其课程信息,因此获得这两者的唯一方法是使用tblRegistration
。如果您使用此表,则在查询中应该获得您要查找的结果。
编辑:
由于评论者指出第二张图是UNION
而不是JOIN
,我在这里不同意这是一个证明它的例子。
如上所述,UNION
将两个查询合并为一个结果集。这是一个带有UNION演示的sqlfiddle:
FULL OUTER JOIN指定结果集中包含左表或右表中不符合连接条件的行,并且与另一个表对应的输出列设置为NULL
。这是INNER JOIN
通常返回的所有行的补充。这是一个带有FULL OUTER JOIN演示的sqlfiddle:
正如您所看到的,两个查询中的产品不尽相同,因此图表中的FULL OUTER JOIN
不是UNION
。
答案 1 :(得分:0)
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
答案 2 :(得分:0)
Oracle语法:
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