Oracle内连接、外连接、右外连接、全外连接 实现表关联显示

来源:互联网 发布:linux 串口调试工具 编辑:程序博客网 时间:2024/06/14 22:58

实现多表(字段部分相同)关联显示

A表:

select    t1.uuid,t1.fname,t2.username    from    t_file t1,t_admin t2    where t1.aid=t2.uuid and t1.status= 1;
B表:

select    t1.uuid,t1.fname,t3.realname    from    t_file t1,t_teacher t3    where t1.tid=t3.uuid and t1.status= 1 


要求显示效果大概这样。


uuidusernamerealnamefnameaaaa我有username Abbbb 我有realnameB



解决方法:

用oracle 右外连接 就可以了。
select t1.uuidt,t2.realname,t1.aid,t1.tid,t1.status  from  t_file t1,t_teacher t2,t_admin t3 where t1.tid =t2.uuid(+) and t1.aid=t3.uuid(+) and t1.status=1

下面是参考的:http://www.blogjava.net/hello-yun/archive/2011/04/08/347890.html


TESTA,TESTB,TESTC,各有A, B两列

A

B

001

10A

002

20A

A

B

001

10B

003

30B

A

B

001

10C

004

40C

连接分为两种:内连接与外连接。

A.内连接 (比较简单常用的)

内连接,即最常见的等值连接,例:

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

显示:

A

B

A

B

001

10A

001

10B

B.外连接

外连接分为左外连接,右外连接和全外连接。

1.  左外连接 left outer join 或者 left join

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

SELECT *FROM TESTA LEFT OUTER JOIN TESTB ON TESTA.A=TESTB.AOracle 支持另一种写法SELECT * FROM TESTA,TESTBWHERE 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.ALEFT OUTER JOIN TESTCON TESTA.A=TESTC.AOracle 支持的另外一种写法SELECT *FROM TESTA,TESTB,TESTCWHERE 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,TESTBWHERE 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 TESTBON TESTA.A=TESTB.A

全外连接的等价写法,对同一表先做左连接,然后右连接

SELECT  TESTA.*,TESTB.*FROM TESTALEFT OUTER JOIN TESTBON TESTA.A=TESTB.AUNIONSELECT TESTA.*,TESTB.*FROM TESTBLEFT OUTER JOIN TESTAON TESTA.A=TESTB.A

结果:

A

B

A

B

001

10A

001

10B

002

20A

003

30B







2 0
原创粉丝点击