在 Oracle11g 中连接三个表 SQL
Joining three tables in Oracle11g SQL
通常情况下,这对我来说不是问题,但是 1. 我的老师从来没有教过我们如何像这样加入三个 table 和 2. 这甚至没有包含在本周的作业中.但是因为这些数据库不是我们平时使用的Oracle接口数据库,我连试错都没有办法。
我有三个 table。内容对问题并不重要。
第一个 table 是 STUDENTS,包含 LAST_NAME、SID 和 MID 列(此处的两个 MID 单元格具有 NULL 值)。
第二个 table 是 COURSES,包含 COURSES 列(不知道为什么设计这个问题的人决定将其命名为 table)和 CID(我假设这是一个主键)
第三个 table 已注册,包含列 SID 和 CID。
有人问我以下问题
"使用上面显示的三个 table 回答以下问题:
一种。您将使用哪种连接来连接所有三个 table?
编写将产生所需结果的语法。
b.说出两个可用于从自然连接中检索数据的 table。
编写将产生所需结果的语法。"
我卡在了这个上。到目前为止,Internet 没有多大帮助,甚至 Oracle 的资料也没有。我们学习了加入,但我们从未加入超过两个 table。任何帮助将不胜感激。
STUDENTS,包含 LAST_NAME、SID 和 MID 列
COURSES,包含 COURSES 和 CID 列
已注册,包含 SID 和 CID 列。
一个 table 可以与另一个 table 连接,如果两个 table 有一个共同的列。
所以这里的 STUDENTS TABLE 可以加入 ENROLLED,
ENROLLED.SID=STUDENTS.SID
并且可以通过 ENROLLED 加入课程
ENROLLED.CID=COURSES.CID
What kind of join would you use to join all three tables? Write the
syntax that would produce the desired result.
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)
这里我使用了 left join 来显示学生,即使他没有在任何地方注册。但是您也可以使用 inner join(s) 来避免这种情况或者
full join 显示所有内容 - 在某处注册的学生、未注册的学生和没有学生的课程。
在这个 Stack Overflow topic
你很好地解释了不同类型的连接是如何工作的。
Name two tables that could be used to retrieve data from a natural
join. Write the syntax that would produce the desired result.
这些对是:ENROLLED 和 STUDENTS(公共密钥 SID)以及 ENROLLED 和 COURSES(公共密钥 CID)。
select * from enrolled natural join students;
select * from enrolled natural join courses;
您可以使用SQLFiddle 来测试您自己的想法,就像我第一次查询时使用的那样。从列表框中选择数据库(Oracle),
接下来在左侧面板中构建模式(创建表、插入数据),然后在右侧面板中编写查询。
如果查询成功运行,结果将在底部可见。
通常情况下,这对我来说不是问题,但是 1. 我的老师从来没有教过我们如何像这样加入三个 table 和 2. 这甚至没有包含在本周的作业中.但是因为这些数据库不是我们平时使用的Oracle接口数据库,我连试错都没有办法。
我有三个 table。内容对问题并不重要。 第一个 table 是 STUDENTS,包含 LAST_NAME、SID 和 MID 列(此处的两个 MID 单元格具有 NULL 值)。 第二个 table 是 COURSES,包含 COURSES 列(不知道为什么设计这个问题的人决定将其命名为 table)和 CID(我假设这是一个主键) 第三个 table 已注册,包含列 SID 和 CID。
有人问我以下问题 "使用上面显示的三个 table 回答以下问题: 一种。您将使用哪种连接来连接所有三个 table? 编写将产生所需结果的语法。 b.说出两个可用于从自然连接中检索数据的 table。 编写将产生所需结果的语法。"
我卡在了这个上。到目前为止,Internet 没有多大帮助,甚至 Oracle 的资料也没有。我们学习了加入,但我们从未加入超过两个 table。任何帮助将不胜感激。
STUDENTS,包含 LAST_NAME、SID 和 MID 列 COURSES,包含 COURSES 和 CID 列 已注册,包含 SID 和 CID 列。
一个 table 可以与另一个 table 连接,如果两个 table 有一个共同的列。 所以这里的 STUDENTS TABLE 可以加入 ENROLLED,
ENROLLED.SID=STUDENTS.SID
并且可以通过 ENROLLED 加入课程
ENROLLED.CID=COURSES.CID
What kind of join would you use to join all three tables? Write the syntax that would produce the desired result.
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)
这里我使用了 left join 来显示学生,即使他没有在任何地方注册。但是您也可以使用 inner join(s) 来避免这种情况或者 full join 显示所有内容 - 在某处注册的学生、未注册的学生和没有学生的课程。 在这个 Stack Overflow topic 你很好地解释了不同类型的连接是如何工作的。
Name two tables that could be used to retrieve data from a natural join. Write the syntax that would produce the desired result.
这些对是:ENROLLED 和 STUDENTS(公共密钥 SID)以及 ENROLLED 和 COURSES(公共密钥 CID)。
select * from enrolled natural join students;
select * from enrolled natural join courses;
您可以使用SQLFiddle 来测试您自己的想法,就像我第一次查询时使用的那样。从列表框中选择数据库(Oracle), 接下来在左侧面板中构建模式(创建表、插入数据),然后在右侧面板中编写查询。 如果查询成功运行,结果将在底部可见。