1. 程式人生 > >(筆記)oracle中的join的整理和結構分析

(筆記)oracle中的join的整理和結構分析

在Oracle中的join主要分為:外連線(outter join),內連線(inner join),自身連線(self-join)

外連線(outter join)又分為左外連線(left outer join)、右外連線(right outer join)、全外連線(full outer join)。在sql語句(structured Query Language)是:table_1 left/right/full outer join table_2,通常我們省略outer。

下面利用一個例子說明資料庫的外連線問題:

一:建立兩張表out_join1 and out_join2並插入相應的資料:

create table out_join1(
id_1 varchar2(20),
name_1 varchar2(25)
)

create table out_join2(
id_2 varchar2(20),
name_2 varchar2(25)
)
insert into out_join1 values('1','daniel');
insert into out_join1 values('3','justin');
insert into out_join1 values('5','william');
insert into out_join1 values('6','demon');
insert into out_join1 values('7','david');

insert into out_join2 values('1','c_daniel');
insert into out_join2 values('2','irs');
insert into out_join2 values('3','c_justin');
insert into out_join2 values('4','linda');
insert into out_join2 values('5','c_william');

 out_join1 & out_join2的資料如下:



 

左外連線(left outer join)

select * from out_join1 left outer join out_join2 on out_join1.id_1=out_join2.id_2   -- 注意此處的on關鍵字
select * from out_join1,out_join2 where out_join1.id_1=out_join2.id_2(+)               --注意此處的where關鍵字和(+)符號 

結果如下:

 

 

詳細解釋:

第一條查詢語句和第二條查詢語句的的意義是一樣的,只是表達方式不同。table_1 left outer join table_2 on table_1.id = table_2.id,是以table_1的id號的index基礎進行連線,table_2中有與table_1中id相同的進行配對。table_2中沒有配對到的則null表示;

注意:由於此處的id具有unique所以不會出現一對多的關係,如果出現一對多的關係則顯示結果會怎麼樣了...

右外連線(right outer join)

select * from out_join1 right outer join out_join2 on out_join1.id_1=out_join2.id_2
select * from out_join1,out_join2 where out_join1.id_1(+)=out_join2.id_2

 結果如下:

第一個條件查詢的結果:                                        第二個條件查詢的結果:

 

詳細解釋:

第一條查詢語句和第二條查詢語句的的意義是一樣的,只是表達方式不同。table_1 right outer join table_2 on table_1.id = table_2.id,是以table_2的id號的index基礎進行連線,table_1中有與table_2中id相同的進行配對。table_1中沒有配對到的則null表示; 當然最後你會發現顯示的結果的結構不相同,那是因為他們的查詢的機理不同。


 
 全外連線(full outer join)

select * from out_join1 full join out_join2 on out_join1.id_1=out_join2.id_2

 結果如下:

 
 

詳細解釋:

在full連線中按照以表table_1的id和table_2的id號為基礎進行匹配....有的這連線在一起,沒有的則null表示。table_1在前...

(+)的用法:

    1.+)操作符只能出現在where子句中,並且不能與outer join語法同時使用。
   2.
當使用(+)操作符執行外連線時,如果在where子句中包含多個條件,必須在所有條件中包含(+)操作符
   3.
+)操作符只適用於列,而不能用在表示式上。
   4.
+)操作符不能與orin操作符一起使用。
   5.
+)操作符只能用於實現左外連線和右外連線,而不能用於實現完全外連線。

內連線(inner join)

select * from out_join1 inner join out_join2 on out_join1.id_1=out_join2.id_2

 結果:



 

詳細解釋:

相同的屬性值才顯示,這裡指的是tabel_1.id = table_2.id相同的顯示

自身連線(self join)

select * from out_join1 c1,out_join1 c2 where c1.id_1 = c2.id_1

結果如下:


自然連線(nature join)

select * from out_join2,out_join1 where out_join2.id_2=out_join1.id_1

 結果如下:


分析:同inner連線