数据库版本:
表testa,testb,testc,各有a, b两列
连接分为两种:内连接与外连接。
a.内连接
内连接,即最常见的等值连接,例:
select *
from testa,testb
where testa.a=testb.a
结果
b.外连接
外连接分为左外连接,右外连接和全外连接。
1. 左外连接 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
|
|
|
|
|
2. 右外连接 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
|
3.全外连接 full outer join 或者 full join
全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上
select *
from testa
full outer join testb
on testa.a=testb.a
全外连接的等价写法,对同一表先做左连接,然后右连接
select testa.*,testb.*
from testa
left outer join testb
on testa.a=testb.a
union
select testa.*,testb.*
from testb
left outer join testa
on testa.a=testb.a
结果:
a
|
b
|
a
|
b
|
001
|
10a
|
001
|
10b
|
002
|
20a
|
|
|
|
|
003
|
30b
|