(筆記)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.(+)操作符不能與or和in操作符一起使用。
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連線