實用記憶方法:(+)在哪邊,哪邊就是外來鍵,該錶的資料就「少」;無(+)那邊檢索的就是全表資料。
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由驅動表返回的結果集的條數來定。與驅動順序有關...