【Oracle_SQL】oracle常用连接

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                               

注:显示左右两表的并集,即左右表匹配的数据以及左右两表没有匹配的数据也显示。

 

上一篇:删除数据库中所有表,存储过程


下一篇:2021-11-13