程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 用實驗方法加深理解Oracle的外連接(left/right/full)和內連接(inner)

用實驗方法加深理解Oracle的外連接(left/right/full)和內連接(inner)

編輯:Oracle教程

用實驗方法加深理解Oracle的外連接(left/right/full)和內連接(inner)


總是對Oracle的左連接、右連接以及(+)對應的外連接類型糊塗,通過實驗加深對連接類型語法的理解。外連接分為三種: 1. 左外連接,對應SQL關鍵字:LEFT (OUTER) JOIN 2. 右外連接,對應SQL關鍵字:RIGHT (OUTER) JOIN 3. 全外連接,對應SQL關鍵字:FULL (OUTER) JOIN 左右外連接都是以一張表為基表,在顯示基表所有記錄外,加上另外一張表中匹配的記錄。如果基表的數據在另一張表中沒有記錄,那麼相關聯的結果集行中顯示為空值。 精確點說,引用MOS: 對於左連接,將會返回join連接條件中第一次提到的表(或者”左邊“的表)。 對於右連接,將會返回join連接條件中第二次提到的表(或者”右邊“的表)。
實驗: 1. 准備: SQL> create table left_tbl(id number);
Table created.

SQL> create table right_tbl(id number);
Table created.
insert into left_tbl values(1); insert into left_tbl values(2); insert into left_tbl values(3);
insert into right_tbl values(2); insert into right_tbl values(3); insert into right_tbl values(6);
SQL> select * from left_tbl;
ID
----------
1
2
3

SQL> select * from right_tbl;
ID
----------
2
3
6
2. 左連接 SQL> select * from left_tbl l left join right_tbl r on l.id = r.id;
ID ID
---------- ----------
2 2
3 3
1 從排序看,左右表匹配的記錄排在前面,並且是升序。 也可以這樣寫:select * from left_tbl l left join right_tbl r on l.id = r.id(+);
SQL> select * from left_tbl l, right_tbl r where l.id = r.id(+);
ID ID
---------- ----------
2 2
3 3
1 使用(+),放右表表示左表所有記錄,再加上右表的記錄。
SQL> select * from left_tbl l, right_tbl r where r.id(+) = l.id;
ID ID
---------- ----------
2 2
3 3
1 將where條件中左右表互換,結果還是左連接,因為(+)在左邊,表示加上right表的記錄。
SQL> select * from left_tbl left join right_tbl using (id);
ID
----------
2
3
1 此處使用using,只顯示了左表的記錄。
3. 右連接 SQL> select * from left_tbl l right join right_tbl r on l.id = r.id;
ID ID
---------- ----------
2 2
3 3
6 和左右連接相同,左右表匹配的記錄排在前面,並且是升序。 也可以這樣寫:select * from left_tbl l right join right_tbl r on l.id(+) = r.id;
SQL> select * from left_tbl l, right_tbl r where l.id(+) = r.id;

ID ID
---------- ----------
2 2
3 3
6 使用(+),放左表表示右表所有記錄,再加上左表的記錄。
SQL> select * from left_tbl l, right_tbl r where r.id = l.id(+);

ID ID
---------- ----------
2 2
3 3
6 將where條件中左右表互換,結果還是右連接,因為(+)在右邊,表示加上left表的記錄。
4. 全外連接 SQL> select * from left_tbl l full join right_tbl r on l.id = r.id;或select * from left_tbl l full outer join right_tbl r on l.id = r.id;
ID ID
---------- ----------
2 2
3 3
1
6
會顯示左右表的記錄,不匹配的用NULL。
5. 內連接 說了外連接,再看下內連接,innser join或join。 SQL> select * from left_tbl l inner join right_tbl r on l.id = r.id;
ID ID
---------- ----------
2 2
3 3
用inner join只顯示左右表都匹配的記錄。
SQL> select * from left_tbl l join right_tbl r on l.id = r.id;
ID ID
---------- ----------
2 2
3 3 直接用join和inner join相同。
SQL> select * from left_tbl l, right_tbl r where l.id = r.id;
ID ID
---------- ----------
2 2
3 3 用=代替on是內連接另外一種用法。
總結:
1. (+)在哪個表的旁邊,就表示基表是另外一張表,結果集還需要加上(+)表中不匹配的數據。
2. 內連接inner關鍵字可省,外連接outer關鍵字可省。
3. 用on和where =都可以使用(+)方式。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved