oracle外連線

why566發表於2008-07-10

內連線(inner join)、全連線(full join)、左連線(left join)、右連線(right join)

Oracle的左連線和右連線
PL-SQL中,左連線和右連線以如下方式來實現
檢視如下語句:
SELECT emp_name, dept_name FORM. Employee, Department   WHERE Employee.emp_deptid(+) = Department.deptid
此SQL文使用了右連線,即“(+)”所在位置的另一側為連線的方向,右連線說明等號右側的所有記錄均會被顯示,
無論其在左側是否得到匹配,也就是說上例中無論會不會出現某個部門沒有一個員工的情況,這個部門的名字都會在查詢結果中出現。

反之:
SELECT emp_name, dept_name FORM. Employee, Department WHERE Employee.emp_deptid = Department.deptid(+)
則是左連線,無論這個員工有沒有一個能在Department表中得到匹配的部門號,這個員工的記錄都會被顯示

一般的相等連線:
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的員工記錄和沒有任何員工的部門記錄。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7478833/viewspace-374961/,如需轉載,請註明出處,否則將追究法律責任。

相關文章