首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 外部連接完全指南:LEFT/RIGHT/FULL JOIN 語法與實戰範例

     編輯:Oracle 資料庫基礎

三種外部連接語義對比

連接類型語法結果集包含
左連接LEFT JOIN / LEFT OUTER JOIN左表所有行 + 右表匹配行(無匹配則 NULL)
右連接RIGHT JOIN / RIGHT OUTER JOIN右表所有行 + 左表匹配行(無匹配則 NULL)
全連接FULL JOIN / FULL OUTER JOIN雙表所有行,無匹配處填 NULL

ANSI SQL-99 標準語法(推薦)

左連接範例

SELECT 
  NVL(left_.dummy, '這是要右邊的全部') AS left_dummy,
  NVL(right_.dummy, '這是要左邊的全部') AS right_dummy
FROM dual left_
LEFT JOIN dual right_
  ON left_.dummy || 'd' = right_.dummy;

右連接範例

SELECT 
  NVL(left_.dummy, '這是要右邊的全部') AS left_dummy,
  NVL(right_.dummy, '這是要左邊的全部') AS right_dummy
FROM dual left_
RIGHT JOIN dual right_
  ON left_.dummy || 'd' = right_.dummy;

Oracle 專有舊語法(+(號))

僅支援左/右連接,不支援 FULL JOIN:

左連接(右表欄位加 +)

SELECT 
  NVL(left_.dummy, '這是要右邊的全部') AS left_dummy,
  NVL(right_.dummy, '這是要左邊的全部') AS right_dummy
FROM dual left_, dual right_
WHERE left_.dummy || 'd' = right_.dummy(+);

右連接(左表欄位加 +)

SELECT 
  NVL(left_.dummy, '這是要右邊的全部') AS left_dummy,
  NVL(right_.dummy, '這是要左邊的全部') AS right_dummy
FROM dual left_, dual right_
WHERE left_.dummy(+) || 'd' = right_.dummy;

實戰場景對比

場景推薦寫法理由
主表查詢附屬資訊LEFT JOIN主表為駕駛表,語義清晰
從表反查主表RIGHT JOIN 或 LEFT JOIN 交換順序統一用 LEFT JOIN 降低認知負擔
雙向完整對照FULL JOINANSI 標準唯一支援全外部連接
舊系統維護(+) 語法相容性考量,新代碼禁用

效能與優化提示

  • 駕駛表選擇:小結果集驅動大表,配合索引 NESTED LOOPS
  • WHERE vs ON:外部連接中,ON 條件決定關聯,WHERE 條件過濾結果(可能將外部連接轉為內部連接)
  • NVL/COALESCE:處理 NULL 值顯示預設值

常見錯誤

-- 錯誤:WHERE 條件過濾了外部表的 NULL 行,變相變成內連接
SELECT * FROM a LEFT JOIN b ON a.id = b.id WHERE b.status = 'active';

-- 正確:將外部表條件移至 ON 子句
SELECT * FROM a LEFT JOIN b ON a.id = b.id AND b.status = 'active';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved