Oracle表連線方式

2021-04-06 16:22:22 字數 1572 閱讀 1802

實用記憶方法:(+)在哪邊,哪邊就是外來鍵,該錶的資料就「少」;無(+)那邊檢索的就是全表資料。

oracle 8i,9i 表連線方法。

一般的相等連線:

select * from a, b where a.id = b.id;

這個就屬於內連線。

對於外連線:

oracle中可以使用「(+) 」來表示,9i可以使用left/right/full outer join

left outer join:左外關聯

select e.last_name, e.department_id, d.department_name

from employees e

left outer join departments d

on (e.department_id = d.department_id);

等價於

select e.last_name, e.department_id, d.department_name

from employees e, departments d

where e.department_id=d.department_id(+)

結果為:所有員工及對應部門的記錄,包括沒有對應部門編號department_id的員工記錄。

right outer join:右外關聯

select e.last_name, e.department_id, d.department_name

from employees e

right outer join departments d

on (e.department_id = d.department_id);

等價於

select e.last_name, e.department_id, d.department_name

from employees e, departments d

where e.department_id(+)=d.department_id

結果為:所有員工及對應部門的記錄,包括沒有任何員工的部門記錄。

full outer join:全外關聯

select e.last_name, e.department_id, d.department_name

from employees e

full outer join departments d

on (e.department_id = d.department_id);

結果為:所有員工及對應部門的記錄,包括沒有對應部門編號department_id的員工記錄和沒有任何員工的部門記錄。

oracle8i是不直接支援完全外連線的語法,也就是說不能在左右兩個表上同時加上(+),下面是在oracle8i可以參考的完全外連線語法

select t1.id,t2.id from table1 t1,table t2 where t1.id=t2.id(+)

union

select t1.id,t2.id from table1 t1,table t2 where t1.id(+)=t2.id

oracle 表連線方式

一 連線方式 巢狀迴圈 nested loops nl 雜湊 雜湊連線 hash join hj 歸併 排序合併連線 sort merge join smj 二 連線說明 1.oracle一次只能連線兩個表。不管查詢中有多少個表,oracletable 和內部表 inner table 在巢狀迴圈連...

oracle 表連線方式詳解

在檢視sql執行計畫時,我們會發現表的連線方式有多種,本文對錶的連線方式進行介紹以便更好看懂執行計畫和理解sql執行原理。一 連線方式 巢狀迴圈 nested loops nl 雜湊 雜湊連線 hash join hj 歸併 排序 合併連線 sort merge join smj 二 連線說明 1....

oracle優化之表連線方式

1 表連線型別 nested loops join hash join merge sort join 2 表連線的知識點 表訪問次數 表驅動順序,是否排序,使用限制。nested loops join 驅動表被訪問0次或1次,被驅動表訪問0次或n次,n由驅動表返回的結果集的條數來定。與驅動順序有關...