【问题标题】:Joining three tables in Oracle11g SQLOracle11g SQL中连接三张表
【发布时间】:2015-04-05 05:25:17
【问题描述】:

通常,这对我来说不是问题,但是 1. 我的老师从未教过我们如何像这样和 2 加入三张桌子。这周的作业甚至都没有涉及。但是因为这些数据库不是我们平时使用的Oracle接口数据库,所以我连试错都没有办法。

我有三张桌子。内容对问题并不重要。 第一个表是 STUDENTS,包含 LAST_NAME、SID 和 MID 列(此处的两个 MID 单元格具有 NULL 值)。 第二个表是 COURSES,包含 COURSES 列(不知道为什么设计这个问题的人决定将其命名为与表相同的名称)和 CID(我假设这是一个主键) 第三个表是 ENROLLED,包含 SID 和 CID 列。

我被问到以下问题 “使用上面显示的三个表格来回答以下问题: 一种。您将使用哪种连接来连接所有三个表? 编写将产生所需结果的语法。 湾。命名两个可用于从自然连接中检索数据的表。 编写能产生所需结果的语法。”

我坚持这个。到目前为止,互联网并没有太大的帮助,甚至甲骨文的资料也没有。我们了解了加入,但我们从未加入超过两个表。任何帮助将不胜感激。

【问题讨论】:

  • 没什么特别的。只需添加更多连接子句。当您决定为每个表使用哪种类型的连接时,奇迹就会发生。
  • 没错。这是从未涉及过的新领域,因为我的导师实际上并没有教我们任何东西。所以我不知道要使用什么连接。
  • 你可以在 w3schools 上学习,因为链接是 w3schools.com/sql
  • 我知道如何执行基本的 SQL,但是当至少没有包含这些精确表的虚拟数据库时,我无法弄清楚。我必须实际这样做,当实际数据库中不存在表时,我无法神奇地编写语法。有人能告诉我如何解决这个问题吗?
  • 所以你要求我们写一个查询,因为你没有一个数据库来测试你自己的工作?连接两个以上的表与连接一个或两个表的工作方式相同。如果你想真正体验一下,可以在本地安装一个Oracle个人版,或者使用SQLFiddle之类的工具。

标签: sql oracle oracle11g


【解决方案1】:

STUDENTS,包含 LAST_NAME、SID 和 MID 列 COURSES,包含 COURSES 和 CID 列 ENROLLED,包含 SID 和 CID 列。

如果两个表有一个共同的列,则可以将一个表与另一个表连接。 所以这里的 STUDENTS TABLE 可以和 ENROLLED 一起加入,

ENROLLED.SID =学生.SID

COURSES 可以与 ENROLLED 一起加入

ENROLLED.CID=COURSES.CID

【讨论】:

  • 我感觉这是“如何”,但我不知道联接的名称。我联系上了我的老师。他说他正在寻找的答案只是“多对多”连接,这个术语在我们需要学习的任何文本中都没有出现(我花了很多时间学习,因为测验和考试只会抛出曲线球问题,而不是至关重要的问题。)但基本上,一个平等的加入。但这很有帮助。谢谢你,加比。
【解决方案2】:

您会使用哪种连接来连接所有三个表?写 产生所需结果的语法。

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)

SQLFiddle

这里我使用左连接来显示学生,即使他没有在任何地方注册。但是您也可以使用内部连接来避免这种情况或 完全加入以显示所有内容 - 在某处注册的学生、未注册的学生以及没有学生的课程。 在这个Stack Overflow topic 你有很好的解释不同类型的连接是如何工作的。

列出两个可用于从自然数据中检索数据的表 加入。编写能产生所需结果的语法。

这些对是:ENROLLED 和 STUDENTS(公共密钥 SID)以及 ENROLLED 和 COURSES(公共密钥 CID)。

select * from enrolled natural join students;

select * from enrolled natural join courses;

您可以使用 SQLFiddle 来测试您自己的想法,就像我在第一个查询中使用的那样。从列表框中选择数据库(Oracle), 接下来在左侧面板中构建架构(创建表,插入数据),然后在右侧面板中编写查询。 如果查询成功运行,结果将在底部可见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多