來源:賽迪網 作者:Alizze
關聯在Oracle資料查詢時會經常用到,靈活的應用關聯可以解決很多實際應用的問題.下面給出一些樣本:
建表
create table ab ( ab_id number(5), ab_name varchar2(30) );
create table bb ( bb_id number(5), bb_name varchar2(30) ); |
插入資料
insert into ab(ab_id,ab_name) values(1,'1ab_name'); insert into ab(ab_id,ab_name) values(2,'2ab_name'); insert into ab(ab_id,ab_name) values(3,'3ab_name');
insert into bb(bb_id,bb_name) values(1,'1bb_name'); insert into bb(bb_id,bb_name) values(2,'2bb_name'); insert into bb(bb_id,bb_name) values(4,'4bb_name'); insert into bb(bb_id,bb_name) values(6,'6bb_name'); |
等值關聯(全關聯)
select a.ab_id,a.ab_name,b.bb_name from ab a, bb b where a.ab_id=b.bb_id; |
返回結果
AB_ID AB_NAME BB_NAME 1 1ab_name 1bb_name 2 2ab_name 2bb_name |
返回兩個表中所有能匹配的記錄,不能匹配的記錄不返回。
左關聯
select ab_id,ab_name, bb_name from ab a left join bb b on a.ab_id=b.bb_id; 同 select ab_id,ab_name, bb_name from ab a , bb b where a.ab_id=b.bb_id(+); |
返回結果
AB_ID AB_NAME BB_NAME 1 1ab_name 1bb_name 2 2ab_name 2bb_name 3 3ab_name |
返回左邊表的左右記錄,在右邊表中沒有對應記錄的右表欄位顯示為空白。
右關聯
select ab_id,ab_name, bb_name from ab a right join bb b on a.ab_id=b.bb_id; 同 select ab_id,ab_name, bb_name from ab a , bb b where a.ab_id(+)=b.bb_id; |
返回結果:
AB_ID AB_NAME BB_NAME 1 1ab_name 1bb_name 2 2ab_name 2bb_name 4bb_name 6bb_name |
返回右邊表中所有的記錄,在右邊表不能匹配的記錄行上,左邊表對應的欄位顯示為空白。
完全外關聯
select ab_id,ab_name, bb_name from ab a full join bb b on a.ab_id=b.bb_id; |
返回結果
AB_ID AB_NAME BB_NAME 1 1ab_name 1bb_name 2 2ab_name 2bb_name 3 3ab_name 6bb_name 4bb_name |
返回兩個表所有的結果,如果在關聯條件上沒有對應的記錄,那麼將在該列上顯示為空白。
全關聯返回的結果集範圍最小。完全外關聯返回的結果範圍最大,是否左關聯和右關聯並集;全關聯是左關聯和右關聯的交集。