关于SQL Inner Join与完全参与的疑问:为何选项二错误?
数据库选择题错误选项解析
先明确语句SELECT * FROM enrolled NATURAL RIGHT OUTER JOIN student;的逻辑:
这是自然右外连接,以右侧的student表为基准,必须返回student表的所有行,同时拼接enrolled表中student_id匹配的行数据;若某个学生未在enrolled中有选课记录,对应enrolled的字段会填充为NULL。
你认为结果应为20行,是混淆了概念:
- 题目说明“
enrolled里的所有学生都存在于student中”,这是enrolled对student的完全参与,但这只影响内连接或左外连接的结果,不影响右外连接。 - 右外连接的结果行数由右侧表的总行数决定:
student表有100行,所以结果最多为100行(若所有学生都选了课,结果是100行;若有学生未选课,结果依然是100行,未选课学生的选课字段为NULL)。 - 20行是内连接或以
enrolled为左表的左外连接的结果,因此第二个选项(认为返回20行)是错误的。
内容的提问来源于stack exchange,提问作者Jeff Beh
相关产品推荐
相关产品推荐

