oracle常用外连接
数据版本:11.2.0.4
解释:
类型 关键字 含义
内连接 inner join/join 只连接匹配的行
左外连接 left join 左边的表为主表,主表的全部数据显示;
右边的表只显示符合条件的,不符合条件的以空值显示
右外连接 right join 与右连接相反,即右边的表为主表,主表的全部数据显示;
左边的表只显示符合条件的,不符合条件的以控制显示
全外连接 full join 显示左右两表的并集,即左右表匹配的数据以及左右两表没有匹配的数据也显示
例子:
创建两个表test_a和test_b来看看具体的效果,语句如下:
create table test_a(tno int,tname varchar2(20));
create table test_b(tno int,tname varchar2(20));
insert into test_a values(1,'a');
insert into test_a values(2,'b');
insert into test_b values(2,'c');
insert into test_b values(3,'d');
commit;
--inner join/join
语句:
select a.tno ano,a.tname aname,b.tno bno,b.tname bname from test_a a
inner join test_b b
on a.tno = b.tno;
结果:
ANO ANAME BNO BNAME
---------- ---------- ---------- ----------
2 b 2 c
注:由此可看出只显示两个表共同拥有tno的数据行,即只显示匹配的数据;
语句(去掉inner):
select a.tno ano,a.tname aname,b.tno bno,b.tname bname from test_a a
join test_b b
on a.tno = b.tno;
结果:
ANO ANAME BNO BNAME
---------- ---------- ---------- ----------
2 b 2 c
注:其结果跟带inner 的join一样,由此可知两者等效。
--left join
语句:
select a.tno ano,a.tname aname,b.tno bno,b.tname bname from test_a a
left join test_b b
on a.tno = b.tno;
结果:
ANO ANAME BNO BNAME
---------- ---------- ---------- ----------
2 b 2 c
1 a
注:显示左边表的全部数据以及右边表符合条件的数据。
--right join
语句:
select a.tno ano,a.tname aname,b.tno bno,b.tname bname from test_a a
right join test_b b
on a.tno = b.tno;
结果:
ANO ANAME BNO BNAME
---------- ---------- ---------- ----------
2 b 2 c
3 d
注:显示右边表的全部数据以及左边表符合条件的数据。
--full join
语句:
select a.tno ano,a.tname aname,b.tno bno,b.tname bname from test_a a
full join test_b b
on a.tno = b.tno;
结果:
ANO ANAME BNO BNAME
---------- ---------- ---------- ----------
2 b 2 c
3 d
1 a
注:显示左右两表的并集,即左右表匹配的数据以及左右两表没有匹配的数据也显示。