一、考察的知识点摘要
本题主要考察对SQL中内连接(INNER JOIN) 与外连接(OUTER JOIN) 的核心区别与特性的理解。关键点包括:
- 连接的基本功能 :内连接返回匹配行 ,外连接返回匹配行外加部分或全部不匹配行。
- 外连接的类型与结果 :
- 左/右外连接 :保留左表或右表的全部行,不匹配部分以
NULL
填充。 - 全外连接:返回左右两表的并集,包括匹配行以及两表中所有不匹配的行。
- 左/右外连接 :保留左表或右表的全部行,不匹配部分以
- 连接的语法通用性 :
FULL OUTER JOIN
是SQL标准语法,并非Oracle独有。 - 连接的使用限制:外连接可以用于多表查询和包含多个连接条件。
二、英文题目与答案
题目 :Which three statements are true about inner and outer joins?
A. Outer joins can be used when there are multiple join conditions on two tables
B. Outer joins can only be used between two tables per query
C. A left or right outer join returns only unmatched rows
D. A full outer join returns matched and unmatched rows
E. An inner join returns matched rows
F. A full outer join must use Oracle syntax
正确答案 :A, D, E
三、题目翻译
关于内连接和外连接,哪三个陈述是正确的?
A. 当两个表上有多个连接条件时,可以使用外连接
B. 外连接在每个查询中只能用于两个表之间
C. 左外连接或右外连接只返回不匹配的行
D. 全外连接返回匹配和不匹配的行
E. 内连接返回匹配的行
F. 全外连接必须使用Oracle语法
四、题目解析
- 选项A解析:正确 。外连接(如
LEFT JOIN
,RIGHT JOIN
,FULL JOIN
)和内连接一样,其ON
子句可以包含多个连接条件 (例如ON a.id = b.id AND a.name = b.name
),用于更精确地定义表之间的关联规则。 - 选项B解析:错误 。外连接并不限于 只能在两个表之间进行。SQL查询可以连接多个表,例如
A LEFT JOIN B ON ... INNER JOIN C ON ...
。外连接可以与其他类型的连接(内连接、外连接)在同一个查询中组合使用。 - 选项C解析:错误 。左外连接或右外连接的结果集包含两部分 :匹配的行 + 主表(对于LEFT JOIN是左表,对于RIGHT JOIN是右表)中那些在从表中找不到匹配项的行 (这些行的从表部分以
NULL
填充)。选项C说"只返回不匹配的行"是片面的,忽略了匹配的行。 - 选项D解析:正确 。
FULL OUTER JOIN
会返回来自两个连接表的所有行。当一行在另一个表中找到匹配时,它返回匹配的数据;当在另一表中找不到匹配时,相应部分用NULL
填充。因此,它确实返回了所有匹配和不匹配的行。 - 选项E解析:正确 。这是内连接最根本的定义 。
INNER JOIN
只返回那些在连接的两个表中都满足连接条件的行,即只返回精确匹配的行。 - 选项F解析:错误 。
FULL OUTER JOIN
是标准SQL语法,并非Oracle数据库特有的。其他如MySQL(虽早期版本不完全支持,但可通过联合LEFT JOIN和RIGHT JOIN模拟)、SQL Server、PostgreSQL等主流数据库系统都支持此语法。
五、考察的知识点详情
-
连接查询的核心原理:
- 本质:连接是将两个或多个表根据关联条件组合在一起的操作,结果可视为一张临时表。
- 连接过程 :数据库通常会先对涉及的表进行笛卡尔积 操作,然后根据
ON
或WHERE
子句中的连接条件进行过滤。明确写出连接条件(如ON a.key = b.key
)非常重要,以避免产生巨大的、通常无意义的笛卡尔积结果。
-
内连接(INNER JOIN)详解:
- 结果集 :仅包含两个表中键值完全匹配 的行。可理解为两表的交集部分。
- 语法形式 :
SELECT ... FROM table_a INNER JOIN table_b ON a.key = b.key;
(显式标准语法,INNER
关键字可省略)SELECT ... FROM table_a, table_b WHERE a.key = b.key;
(隐式语法,在WHERE
子句中指定连接条件)
-
外连接(OUTER JOIN)详解 :
下表清晰对比了三种外连接的核心特性:
连接类型 关键字 结果集描述 核心特点 左外连接 LEFT JOIN
或LEFT OUTER JOIN
返回左表全部行 + 右表匹配行 。右表无匹配时,右表字段以 NULL
填充。保留左表全部记录。 右外连接 RIGHT JOIN
或RIGHT OUTER JOIN
返回右表全部行 + 左表匹配行 。左表无匹配时,左表字段以 NULL
填充。保留右表全部记录。 全外连接 FULL JOIN
或FULL OUTER JOIN
返回左表和右表的并集 。匹配部分正常显示,两表各自不匹配的部分均以 NULL
填充。同时保留两表全部记录,是左外连接和右外连接的并集(去重后)。 -
ON条件与WHERE条件的区别:
ON
子句:用于指定表之间的连接条件,决定如何将表连接起来。WHERE
子句:在连接操作完成后,用于对结果集进行过滤,限制最终返回哪些行。- 最佳实践建议是将连接条件放在
ON
子句中,将对结果集的过滤条件放在WHERE
子句中。
最后,各位帅哥美女,点个关注吧!我们一起成长,一起成为大佬!
