[英]Joining three tables in Oracle11g SQL
通常,这对我来说不是问题,但是1.我的教练从未教过我们如何联接三个这样的表和2.甚至在本周的作业中也没有涉及。 但是因为这些数据库不在我们通常使用的Oracle接口数据库中,所以我什至无法进行反复试验。
我有三张桌子。 内容对这个问题并不重要。 第一个表是STUDENTS,具有LAST_NAME,SID和MID列(此处两个MID单元具有NULL值)。 第二个表是COURSES,其列为COURSES(不知道为什么设计此问题的人决定将其命名为与表相同)和CID(我假设这是主键)。第三个表是ENROLLED,其列为SID和CID 。
我被问到以下问题“使用上面显示的三个表来回答以下问题:a。您将使用哪种联接来联接所有三个表?编写将产生所需结果的语法。b。命名两个表可以用来从自然联接中检索数据。编写可产生所需结果的语法。”
我被困在这一个。 到目前为止,Internet并没有太大帮助,甚至Oracle的资料也没有。 我们了解了联接的知识,但从未联接两个以上的表。 任何帮助,将不胜感激。
具有LAST_NAME,SID和MID COURSES列,具有COURSES和CID ENROLLED列,具有SID和CID列的学生。
如果两个表都有一个共同的列,则一个表可以与另一个表连接。 所以这里的学生表可以和ENROLLED一起使用,
ENROLLED.SID =学生.SID
和课程可以与ENROLLED一起加入
ENROLLED.CID =课程.CID
您将使用哪种联接来联接所有三个表? 编写将产生所需结果的语法。
select last_name, courses
from students
left join enrolled on students.sid = enrolled.sid
left join courses on enrolled.cid = courses.cid
要么
select last_name, courses from students
left join (select * from enrolled join courses using (cid)) using (sid)
在这里,我使用左加入来显示学生,即使他没有在任何地方注册。 但是,您也可以使用内部联接来避免这种情况,也可以使用完全联接来显示所有内容-在某个地方就读的学生,未就读的学生和没有学生的课程。 在这个Stack Overflow主题中,您将很好地解释不同类型的联接如何工作。
命名两个表,这些表可用于从自然联接中检索数据。 编写将产生所需结果的语法。
这些对是:ENROLLED和STUDENTS(公共密钥SID)以及ENROLLED和COURSES(公共密钥CID)。
select * from enrolled natural join students;
select * from enrolled natural join courses;
您可以使用SQLFiddle测试您自己的想法,就像我第一次查询时所用的那样。 从列表框中选择数据库(Oracle),左侧面板中的下一个构建模式(创建表,插入数据),然后在右侧面板中编写查询。 如果查询成功运行,结果将显示在底部。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.