在Oracle中,(+)表示JOIN中的“可选”表。因此,在您的查询中,
SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a,b
WHERE a.id=b.id(+)
这是表'b'到表'a'的左外部联接。当另一端(可选表'b')没有数据时,它将返回表'a'的所有数据而不会丢失其数据。
相同查询的现代标准语法为
SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a
LEFT JOIN b ON a.id=b.id
或简称a.id=b.id
(并非所有数据库都支持):
SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a
LEFT JOIN b USING(id)
如果删除(+),则将是普通的内部联接查询
在Oracle和其他数据库中,较旧的语法:
SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a,b
WHERE a.id=b.id
更现代的语法:
SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a
INNER JOIN b ON a.id=b.id
或者简单地:
SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a
JOIN b ON a.id=b.id
它只会返回“ a”和“ b”表的“ id”值相同的所有数据,表示公共部分。
如果您想使查询成为右联接
这与LEFT JOIN相同,但是切换哪个表是可选的。
旧的Oracle语法:
SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a,b
WHERE a.id(+)=b.id
现代标准语法:
SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a
RIGHT JOIN b ON a.id=b.id
参考与帮助:
https://asktom.oracle.com/pls/asktom/f?p=100:11::::::P11_QUESTION_ID:6585774577187
在Oracle 11g中使用+登录进行左外部联接
https://www.w3schools.com/sql/sql_join_left.asp