[轉]Oracle 加號外鏈接

今天在一段oracle的sql語句中看到這樣的寫法。sql

SELECT ******
FROM   ******
WHERE  ******
       AND r1.attribute13 = h1.employee_num(+) oracle

最後面出現了小括號中間放一個加號的寫法,oracle用的時候不長,不知道這是啥意思,因而擺肚一下。竟然是外鏈接的意思,就是sql server中的left/right (outer)的意思。spa

================server

 

對於外鏈接,Oracle中可使用「(+)」來表示,標準 sql 可使用LEFT/RIGHT/FULL OUTER JOIN,下面將配合實例一一介紹。 ast

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); sql語句

等價於 co

SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id=d.department_id(+); background


結果爲:全部員工及對應部門的記錄,包括沒有對應部門編號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 中識別,標準 sql 是不能識別的。

相關文章
相關標籤/搜索