在 Oracle 傳統語法中,外部聯結透過在 WHERE 條件的欄位後加上 (+) 符號來表示。許多初學者對其運作方式感到困惑,本文將透過實例詳細解析。
SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id(+);
執行結果: 回傳所有員工資料,包含沒有對應部門編號的員工。對於無對應部門的員工,d.department_name 會顯示 NULL。
這是一個以 employees 為主表(驅動表)的左外部聯結。Oracle 的執行流程如下:
employees 表中的每一筆員工記錄。departments 表中尋找 department_id 相符的部門。e.last_name, e.department_id, d.department_name。d.department_name 為 NULL,其他員工欄位保留原值。(+) 放在哪一邊,哪一邊就是「可能缺少資料」的那張表(被外部聯結的表)。範例中 d.department_id(+) 表示 departments 表允許無對應資料。Oracle 9i 起支援 ANSI SQL:1999 標準語法,建議改用更清晰的 LEFT JOIN:
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id;
標準語法可讀性更高,且避免 (+) 符號的諸多限制(如無法搭配 OR 條件、無法進行全外部聯結等)。