Oracle中的聯合查詢-自然連接/外連接/內連接

 

自然連接
select *
from r1 natural [inner] join r2 natural [inner] join r3
where P;
 
select A1,A2
from r1
natural [inner] join
r2,r3 where r2.A=r3.B;
 
自然連接中,匹配關係(relation,表)中屬性(attribute,列)的屬性名稱相同的所有列,只保留所有屬性名稱都相同的元組(tuple,行),並顯示出來;列出屬性的順序:首先列出兩個關係中相同的屬性,然後列出那些只存在在第一個關係中的屬性,最後輸出只存在第二個關係中的屬性。
 
爲了發揚自然連接的優點,同時避免不必要的相等屬性帶來的危險,SQL允許用戶來指定需要那些列相等:
select *
from r1 [inner] join r2 using (attri_name);
 
注意事項:
1、如果在使用using關鍵字時,而且select的結果列表項中包含了using關鍵字所指明的那個關鍵字,那麼請不要在select的結果列表項中對該關鍵字指明它屬於哪個表。
2、using中僅能使用一個列名。
3、natural join關鍵字和using關鍵字是互斥的,也就是說不能同時出現。
 
外連接
1.左外連接
//自然連接(左外連接)
select *
from student natural left [outer] join grade;
//另一種左外連接方式(非自然連接)
select *
from student A left [outer] join grade B on A.id=B.id;
等價於
select *
from student A,grade B
where A.id=B.id(+);
2.右外連接
//自然連接(右外連接)
select *
from student natural right [outer] join grade;
//另一種右外連接方式(非自然連接)
select *
from student A right [outer] join grade B
on A.id=B.id;
select *
from student A,grade B
where A.id(+)=B.id;
3.全外連接
//自然連接(全外連接)
select *
from student natural full [outer] join on grade;
//另一種全外連接
select *
from student A full [outer] join grade B
on A.id=B.id;
 
(+)操作符只能出現在where子句中
 當使用(+)操作符執行外連接時,如果在where子句中包含有多個條件,則必須在所有條件中都包含( +)操作符
(+)操作符只適用於列,而不能用在表達式上。
(+)操作符不能與or和in操作符一起使用。
(+)操作符只能用於實現左外連接和右外連接,而不能用於實現完全外連接。
 
內連接
當省略outer和inner時,默認爲內連接
select *
from student A [inner] join grade B on A.id=B.id;
等價於
select *
from student A,grade B where A.id=B.id;
select *
from student [inner] join grade using(id);
的結果類似於自然連接,不重複顯示id列~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章