天天看點

Oracle中的外連接配接用法

在講外連接配接之前,先舉例介紹内連接配接,也就是一般的相等連接配接。

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

對于外連接配接,Oracle中可以使用“(+)”來表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN,下面将配合執行個體一一介紹。

1. 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的員工記錄。

2. 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;       

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

3. 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的員工記錄和沒有任何員工的部門記錄。

連接配接類型 定義 圖示 例子
内連接配接 隻連接配接比對的行
Oracle中的外連接配接用法
select A.c1,B.c2 from A join B on A.c3 = B.c3;
左外連接配接 包含左邊表的全部行(不管右邊的表中是否存在與它們比對的行)以及右邊表中全部比對的行
Oracle中的外連接配接用法
select A.c1,B.c2 from A left join B on A.c3 = B.c3;
右外連接配接 包含右邊表的全部行(不管左邊的表中是否存在與它們比對的行)以及左邊表中全部比對的行
Oracle中的外連接配接用法
select A.c1,B.c2 from A right join B on A.c3 = B.c3;
全外連接配接 包含左、右兩個表的全部行,不管在另一邊的表中是否存在與它們比對的行
Oracle中的外連接配接用法
select A.c1,B.c2 from A full join B on A.c3 = B.c3;
(theta)連接配接 使用等值以外的條件來比對左、右兩個表中的行
Oracle中的外連接配接用法
select A.c1,B.c2 from A join B on A.c3 != B.c3;
交叉連接配接 生成笛卡爾積——它不使用任何比對或者選取條件,而是直接将一個資料源中的每個行與另一個資料源的每個行一一比對 select A.c1,B.c2 from A,B;