2012-04-19 90 views
0

我试图显示学生的名字,姓氏,SID,主要和次要。以及每个学生的课程,CID和会议时间。桥表虽然让我感到困惑。 Idk是否做联盟或多表加入或什么。请帮忙!SQL UNION/JOIN?

enter image description here

+0

你有没有试图使用这两种方法来创建查询 - 你发现了什么? – 2012-04-19 21:27:20

+0

Yesss :)但这是最后一个问题哈哈。如果这对任何东西都有效 我尝试过创建一个UNION,但它说我需要在目标列表中有相同数量的表达式。 – Kendall 2012-04-19 21:27:39

+0

我们被允许接受外界的帮助。 – Kendall 2012-04-19 21:31:00

回答

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 
+0

不应该是一个内部连接,如果有的话? – Kendall 2012-04-19 21:58:28

+0

@肯代尔是否至少有一门课程需要学习?如果是,它可以是'INNER JOIN'。如果没有课程相关的学生可以使用'LEFT JOIN',否则这些学生不会在结果集中。 – 2012-04-19 22:00:13

0

甲骨文语法:

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 
3

由于这是功课,而不是回答你的问题直接,我会提供你一些提示。

你应该真的考虑审查UNIONJOINs

当您希望在同一数据集中返回多个查询时使用UNION。它们必须在每个字段中具有相似的数据类型,并且在每个查询中具有相同数量的字段。所以对于这个特定的问题,使用UNION是否合理?可能不会,因为你希望学生和他们的课程排成一行。

对于此类查询,您需要一个JOIN。有一个真正有用的JOIN视觉解释可以在线获得。我建议在学习SQL时保持它的方便。

A Visual Explanation of SQL Joins

由于需要学生的数据和他们的课程信息,您可以得到的唯一方式是使用tblRegistration。如果你使用这个表格,在你的查询中你应该得到你正在查找的结果。

编辑:

由于评论者指出,第二个图是UNION不是JOIN,我在这里不同意就是一个例子来证明这一点。

如上所述的A UNION将两个查询组合成单个结果集。这是一个带UNION演示一个sqlfiddle:

Fiddle 1

完全外连接指定从左边或右边表中的行不符合联接条件包括在结果集,输出列与其他表对应的设置为NULL。这是通常由INNER JOIN返回的所有行的补充。这是一个带FULL OUTER JOIN演示一个sqlfiddle:

Fiddle2

正如你可以看到这两个查询的产品是不一样的,所以图中的FULL OUTER JOIN不是UNION

+0

谢谢:)但我不知道如何合并桥表 – Kendall 2012-04-19 21:59:13

+0

您有具体问题吗?然后我可以指出你正确的方向。 – Taryn 2012-04-19 22:03:10

+0

@onedaywhen我不同意。完整的外部连接与UNION不同,请参阅我的编辑原因。此外,这种视觉解释不是由我撰写的,并且已经在这里引用了100次,因此只是搜索文章名称。我用它作为参考来显示差异。如果您认为它们是相同的,请解释原因。 – Taryn 2012-04-20 11:20:52