Oracle學習筆記(一)----------內、外鏈接

這麼久終於能夠靜下來整理一下工做上學到的東西了(主要仍是本身太懶了。。)sql

廢話少說,正文開始數據庫

在公司裏,數據庫用的基本都是Oracle,因此就學了一下Oracle的一點知識,如今整理一下本身遇到的問題和學到的一些東西。spa

先說說本身常常搞混的內鏈接、外鏈接(大學裏一直沒搞懂。。)3d

數據表之間有不少種鏈接方式,如:內外鏈接等code

 

一(內鏈接):blog

內鏈接就是咱們常常說的等值鏈接或者天然鏈接。class

內鏈接用鏈接 inner join(join)關鍵字鏈接表(或者直接用where和「=」號)。select

直接上例子:sql語句

設有表以下:im

學生表:

      

班級表,對應學生表中的classid:

--自鏈接  :只返回兩張錶鏈接列的匹配項。
--如下三種查詢結果同樣。
select * from student s inner join class c on s.classid=c.id; 
select * from student s join class c on s.classid=c.id;
select * from student s,class c where s.classid=c.id;

天然鏈接結果:

內鏈接(天然鏈接)只匹配了符合條件的記錄。

 

二(外鏈接):

外鏈接分爲左外鏈接、右外鏈接以及全外鏈接。

一、左外鏈接(左邊的表不加限制),用left out join(left join)關鍵字

仍是舉例子,仍是上述的表:

--左鏈接 :列出左邊表所有的,及右邊表符合條件的,不符合條件的以空值代替。
--在(+)計算時,哪一個帶(+)哪一個須要條件符合的,另外一個所有的。即放左即右鏈接,放右即左鏈接。
--如下結果集相同。
select * from student s left join class c on s.classid=c.id;
select * from student s,class c where s.classid=c.id(+);

左外鏈接結果:

左外鏈接:列出右表符合條件的記錄以及左表所有的記錄,右表沒有符合的用null表示。

Oracle能夠用(+)表示外鏈接,當(+)跟在一個表的屬性後面時,它表示哪一個表須要符合條件。放在左邊表示右外鏈接,放在右邊表示左外鏈接。

 

二、右外鏈接(右邊的表不加限制),用right out join(right join)關鍵字

看下面sql語句:

--右外鏈接 :與左鏈接同樣,列出右邊表所有的,及左邊表符合條件的,不符合條件
--的用 空值  替代。
--(+)同樣,它的位置與鏈接相反。
select * from student s right join class c on s.classid=c.id;
select * from student s,class c where s.classid(+)=c.id;

右外鏈接結果:

右外鏈接跟左外鏈接相同,只是要求符合條件的表不一樣(右外鏈接要求列出左表符合條件的記錄)。

右外鏈接:列出左表符合條件的記錄以及右表所有的記錄,左表沒有符合的用null表示。

Oracle能夠用(+)表示外鏈接,當(+)跟在一個表的屬性後面時,它表示哪一個表須要符合條件。放在左邊表示右外鏈接,放在右邊表示左外鏈接。

 

三、全外鏈接(左右兩表都不加限制),用full out join(full join)關鍵字

仍是舉例子:

--全鏈接 :產生M+N的結果集,列出兩表所有的,不符合條件的,以空值代替。
select * from student s full join class c on s.classid=c.id;

全外鏈接結果:

全外鏈接對兩邊的表都不加限制,列出左右兩表全部的記錄,沒有符合條件的用null替代。

相關文章
相關標籤/搜索