SQL UNION / JOIN?

时间:2012-04-19 21:23:24

标签: sql join union

我正在尝试显示学生的名字,姓氏,SID,专业和辅修。以及每个学生的课程,CID和会议时间。 Bridge表让我感到困惑。喜欢是做联盟还是多桌加入或者是什么。请帮助!

enter image description here

3 个答案:

答案 0 :(得分:3)

由于这是作业,而不是直接回答你的问题,我会给你一些提示。

您应该考虑审核UNIONJOINs

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

对于此类查询,您需要JOIN。在线提供了一个非常有用的JOIN视觉解释。我建议您在学习SQL时随时帮助您。

A Visual Explanation of SQL Joins

由于您需要学生数据及其课程信息,因此获得这两者的唯一方法是使用tblRegistration。如果您使用此表,则在查询中应该获得您要查找的结果。

编辑:

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

如上所述,UNION将两个查询合并为一个结果集。这是一个带有UNION演示的sqlfiddle:

Fiddle 1

FULL OUTER JOIN指定结果集中包含左表或右表中不符合连接条件的行,并且与另一个表对应的输出列设置为NULL。这是INNER JOIN通常返回的所有行的补充。这是一个带有FULL OUTER JOIN演示的sqlfiddle:

Fiddle2

正如您所看到的,两个查询中的产品不尽相同,因此图表中的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