Oracle內連接、左外連接、右外連接、全外連接以及(+)號用法


Oracle內連接、左外連接、右外連接、全外連接以及(+)號用法

1、數據准備階段   
  創建數據庫表,並插入數據,用於學習和測試.

drop table t_001;
drop table t_002;

CREATE TABLE t_001 (
    ID NUMBER NOT NULL,
    NAME VARCHAR2(8) NOT NULL,
    constraint t_001_id_pk primary key(id)
);
CREATE TABLE t_002 (
    ID NUMBER NOT NULL,
    NAME VARCHAR2(8) NOT NULL,
    constraint t_002_id_pk primary key(id)
);

INSERT INTO t_001 VALUES (1, 'CC');
INSERT INTO t_001 VALUES (2, 'HL');
INSERT INTO t_001 VALUES (3, 'WJ');
INSERT INTO t_001 VALUES (5, 'ZY');
INSERT INTO t_001 VALUES (7, 'XJ');

INSERT INTO t_002 VALUES (1, 'ZHB');
INSERT INTO t_002 VALUES (2, 'XDH');
INSERT INTO t_002 VALUES (3, 'WLZ');
INSERT INTO t_002 VALUES (4, 'HGL');
INSERT INTO t_002 VALUES (6, 'YSQ');

先進行簡單的單表查詢.

2、內連接(join/inner join)   

select * from t_001 t1 inner join t_002 t2 on t1.id=t2.id;

左表和右表都要做限制,僅顯示滿足on后面條件的數據。

select * from t_001 t1 join t_002 t2 on t1.id=t2.id;

select * from t_001 t1,t_002 t2 where t1.id=t2.id;

3、左外連接(left outer join/ left join)    

select * from t_001 t1 left join t_002 t2 on t1.id=t2.id;

 

left join是以左表的記錄為基礎的,示例中t_001可以看成左表,t_002可以看成右表,它的結果集是t_001表中的全部數據,再加上t_001表和t_002表匹配后的數據。換句話說,左表(t_001)的記錄將會全部表示出來,而右表(t_002)只會顯示符合搜索條件的記錄。t_002表記錄不足的地方均為null。

select * from t_001 t1,t_002 t2 where t1.id=t2.id(+);

用(+)來實現, 這個+號可以這樣來理解: + 表示補充,即哪個表有加號,這個表就是匹配表。如果加號寫在右表,左表就是全部顯示,所以是左連接。

 

4、右外連接(right outer join/ right join)   

select * from t_001 t1 right join t_002 t2 on t1.id=t2.id;

和left join的結果剛好相反,是以右表(t_002)為基礎的。它的結果集是t_002表所有記錄,再加上t_001和t_002匹配后的數據。 t_001表記錄不足的地方均為null。

select * from t_001 t1,t_002 t2 where t1.id(+)=t2.id;

 

 用(+)來實現, 這個+號可以這樣來理解: + 表示補充,即哪個表有加號,這個表就是匹配表。如果加號寫在左表,右表就是全部顯示,所以是右連接。

 

5、全外連接(full outer join/ full join)   

select * from t_001 t1 full join t_002 t2 on t1.id=t2.id;

左表和右表都不做限制,所有的記錄都顯示,兩表不足的地方均為null。

全外連接不支持(+)寫法。

6、總結   

Oracle  連接(inner/outer join)包括以下:

  • 內連接(兩邊的表都加限制)--inner join
  • 左外連接(左邊的表不加限制)--left [outer] join
  • 右外連接(右邊的表不加限制)--right [outer] join
  • 全外連接(左右兩表都不加限制)--full [outer] join

對應sql: 通常外聯接省略outer關鍵字, 寫成:left/right/full join.

     內連接也可省略關鍵字inner,直接寫成join.

  在左連接和右連接時都會以一張001表為基礎表,該表的內容會全部顯示,然后加上001表和002表匹配的內容。 如果001表的數據在002表中沒有記錄。 那么在相關聯的結果集行中列顯示為空值(null)。

內連接,可以使用"(+)",但是必須省略。即兩張表均為"主表",都不是匹配表。

而對於外連接, 也可以使用“(+) ”來表示。 關於外聯接使用(+)的一些注意事項:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM