Oracle 外连接 (OUTER JOIN) 分为三种:
左外连接,右外连接,全外连接。
left join、right join 和 join 的区别如下:
- 左外连接(左边的表不加限制)
- 右外连接(右边的表不加限制)
- 全外连接(左右两表都不加限制)
- 连接(左右两表交集)
对应SQL:LEFT/RIGHT/FULL OUTER JOIN。 通常省略OUTER关键字, 写成:LEFT/RIGHT/FULL JOIN。
在左连接和右连接时都会以一张表为基础表,另一张表为补充表,基础表的内容会全部显示,然后再加上两张表匹配的内容。 如果基础表的数据在补充表中没有记录, 那么在相关联的结果集行中补充表列显示为空值(NULL)。
对于外连接, 也可以使用“(+) ”来表示。 关于使用(+)的一些注意事项:
- (+)操作符只能出现在 WHERE 子句中,并且不能与 OUTER JOIN 语法同时使用。
- 当使用(+)操作符执行外连接时,如果在WHERE子句中包含有多个条件,则必须在所有条件中都包含(+)操作符。
- (+)操作符只适用于列,而不能用在表达式上。
- (+)操作符不能与 OR 和 IN 操作符一起使用。
- (+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。
Oracle中 (+)与left join 的用法区别
在Oracle SQL中,(+)
运算符是一个特殊的连接运算符,它用于外连接(Outer Join)中的旧式语法。它通常用于实现左外连接(LEFT OUTER JOIN)或右外连接(RIGHT OUTER JOIN),但在现代的SQL标准中,推荐使用 LEFT JOIN
、RIGHT JOIN
或 FULL JOIN
语法。
左外连接(LEFT OUTER JOIN)
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.common_column = table2.common_column(+);
在这个例子中,table1
是左表,table2
是右表。table1
的所有行都会被返回,即使它们在 table2
中没有匹配的行。对于 table2
中没有匹配的行,相关列将返回 NULL。
右外连接(RIGHT OUTER JOIN)
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.common_column(+) = table2.common_column;
在这个例子中,table2
是左表,table1
是右表。table2
的所有行都会被返回,即使它们在 table1
中没有匹配的行。对于 table1
中没有匹配的行,相关列将返回 NULL。
请注意,虽然 (+)
运算符在Oracle中是有效的,但它不是SQL标准的一部分,并且可能在其他数据库系统中不被支持。因此,推荐使用以下现代的SQL语法来实现外连接