在Oracle数据库中,外连接用于从两个或更多表的连接操作中检索那些在至少一个表中有匹配记录的所有记录。外连接可以确保即使在另一个表中找不到匹配项,指定表中的记录也会出现在结果集中。外连接主要有三种类型:
-
左外连接 (LEFT OUTER JOIN):
- 结果集中包含左表(基础表)的所有记录,即使在右表中没有与之匹配的记录。对于左表中未匹配的记录,在结果中的右表对应字段将显示为NULL。
SELECT a.*, b.* FROM table_a a LEFT OUTER JOIN table_b b ON a.key = b.key;
-
右外连接 (RIGHT OUTER JOIN):
- 结果集中包含右表的所有记录,即使在左表中没有匹配的记录。此时,在结果中的左表对应字段将显示为NULL。
SELECT a.*, b.* FROM table_a a RIGHT OUTER JOIN table_b b ON a.key = b.key;
-
全外连接 (FULL OUTER JOIN):
- 结果集中包含左表和右表的所有记录,无论它们之间是否有匹配。当一方或双方无匹配记录时,另一方的对应字段均显示为NULL。
SELECT a.*, b.* FROM table_a a FULL OUTER JOIN table_b b ON a.key = b.key;
在早期版本的Oracle中,外连接还可以通过在WHERE子句中使用 (+)
符号来表示,但这种方式已被废弃,并推荐使用明确的JOIN语法。例如,旧式的左外连接写法:
SELECT a.*, b.*
FROM table_a a, table_b b
WHERE a.key = b.key(+);
现代Oracle数据库中不再鼓励使用 (+)
符号,而是提倡使用标准的ANSI SQL外连接语法。