ORACLE 多表多条件之外连接

换了新工作之后,接触的都是PL/SQL的东西,之前也没有太注意左外连接,右外连接什么的.

先说说问题吧,我现在是在搞数据的,搞数据最怕的就是数据的丢失,但是多表关联,多条件之后最容易数据丢失,自己水平又有限,每次多表关联之后,到要去查查原表跟最后生成的表,数据rownum是不是一样的.有时候自己写的PL/SQL,自己都没底.

1.首先说说2表之间的左右连接吧.

zc_table1

zc_table2

 

SELECT * FROM zc_table1 a,zc_table2 b WHERE a.id = b.id(+);左外连接,显示左表所有的数据以及右表ID匹配的数据

 

右外连接也是同样的道理.这里就不说明了.

2.  三表之间的外连接

zc_table3

 

1) SELECT * FROM ZC_TABLE1 A,ZC_TABLE2 B,ZC_TABLE3 C WHERE  A.ID = B.ID(+) AND B.ID = C.ID(+);

   这种情况很明显A表的数据会全部显示.A左外连接B,B左外连接C.

2) SELECT * FROM ZC_TABLE1 A,ZC_TABLE2 B,ZC_TABLE3 C WHERE  A.ID = B.ID(+) AND B.ID = C.ID;

这里少了个(+), 左外连接失效,等同于SELECT * FROM ZC_TABLE1 A,ZC_TABLE2 B,ZC_TABLE3 C WHERE  A.ID = B.ID AND B.ID = C.ID;

3)SELECT * FROM ZC_TABLE1 A,ZC_TABLE2 B,ZC_TABLE3 C WHERE  A.ID = B.ID(+) AND A.ID = C.ID(+); 

A左外连接B,A左外连接C. 此时多了C中的一条数据相比于 1).

4) SELECT * FROM ZC_TABLE1 A,ZC_TABLE2 B,ZC_TABLE3 C WHERE A.ID = B.ID(+) AND C.ID = B.ID(+);

这样的sql 是错误的左外连接.

 

posted @ 2014-07-11 18:26  快乐程序猿  阅读(1422)  评论(0编辑  收藏  举报