oracle 表之间的连接;内连接 ,左连接 右连接

时间:2022-09-21 08:12:47

表A:

 A    B

001   10A

002   20A


表B:

A    B

001   10b

003   30b


表C:

A      B

001   10c

004   40c


1.内连接就是常见的等值连接

SELECT * 
FROM TESTA,TESTB
WHERE TESTA.A=TESTB.A


结果


A

B

A

B

001

10A

001

10B


B.外连接


2  左外连接 left outer join 或者 left join

左外连接就是在等值连接的基础上加上主表中的未匹配数据,例:

SELECT *
FROM TESTA 
LEFT OUTER JOIN TESTB 
ON TESTA.A=TESTB.A

Oracle 支持另一种写法

SELECT * 
FROM TESTA,TESTB
WHERE TESTA.A=TESTB.A(+)

结果:


A

B

A

B

001

10A

001

10B

002

20A




三个表做左外连接

SELECT *
FROM TESTA 
LEFT OUTER JOIN TESTB 
ON TESTA.A=TESTB.A
LEFT OUTER JOIN TESTC
ON TESTA.A=TESTC.A

Oracle 支持的另外一种写法

SELECT *
FROM TESTA,TESTB,TESTC
WHERE TESTA.A=TESTB.A(+)
AND TESTA.A=TESTC.A(+)

结果:


A

B

A

B

A

B

001

10A

001

10B

001

10C

002

20A







3. 右外连接 right outer join 或者 right join

右外连接是在等值连接的基础上加上被连接表的不匹配数据

SELECT *
FROM TESTA 
RIGHT OUTER JOIN TESTB 
ON TESTA.A=TESTB.A

Oracle支持的另一种写法

SELECT *
FROM TESTA,TESTB
WHERE TESTA.A(+)=TESTB.A

结果:


A

B

A

B

001

10A

001

10B



003

30B