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

Oracle 表連接完全指南:從交叉連接到 UNION 應用

     編輯:Oracle 資料庫基礎

前言

表連接(Join)是 SQL 查詢的核心技能,Oracle 提供豐富的連接語法支援各種業務場景。本文系統整理六大類連接方式,並附上實戰範例,幫助開發者快速掌握核心概念。

1. 交叉連接 —— 笛卡兒積

交叉連接不指定連接條件,結果為兩張表所有資料列的組合(笛卡兒積)。

SELECT * FROM T1, T2;

若 T1 有 2 筆、T2 有 3 筆,結果將產生 6 筆資料。實務上極少直接使用,通常作為理解連接基礎的教學範例。

2. 等值連接與非等值連接

等值連接

以等號(=)為連接條件,僅回傳雙方符合條件的資料列。

SELECT T1.sectionA, T1.sectionB, T2.sectionC
FROM T1, T2
WHERE T1.sectionA = T2.sectionA;

非等值連接

使用大於、小於、BETWEEN 等非等號運算子,常用於區間比對(如薪資等級表)。

3. 內部連接與外部連接

內部連接

僅回傳雙方都符合連接條件的資料列,是最常見的連接類型。Oracle 專有語法(WHERE 子句)與 ANSI 標準語法(INNER JOIN ... ON)皆可使用。

-- ANSI 標準寫法
SELECT P.PARTNUM, P.DESCRIPTION, P.PRICE, O.NAME, O.PARTNUM
FROM PART P INNER JOIN ORDERS O ON P.PARTNUM = O.PARTNUM;

外部連接

保留單邊(或雙邊)所有資料列,不符合條件處以 NULL 填充。

  • 左外部連接: 保留左表所有資料(LEFT OUTER JOIN 或 Oracle 舊語法 (+) 放在右表欄位)。
  • 右外部連接: 保留右表所有資料(RIGHT OUTER JOIN)。
  • 完整外部連接: 保留雙表所有資料(FULL OUTER JOIN)。
-- Oracle 舊語法範例
SELECT e.name, e.employee_id, ep.salary, ep.marital_status
FROM employee_tbl e, employee_pay_tbl ep
WHERE e.employee_id = ep.employee_id(+);

4. 自我連接

同一張表連接自己,常用於階層結構查詢或資料一致性檢查。

SELECT F.PARTNUM, F.DESCRIPTION, S.PARTNUM, S.DESCRIPTION
FROM PART F, PART S
WHERE F.PARTNUM = S.PARTNUM
  AND F.DESCRIPTION <> S.DESCRIPTION;

若查無資料代表無重複鍵值但描述不一致的異常。

5. 集合運算:UNION 與 UNION ALL

運算子行為效能
UNION合併結果並移除重複列需排序去重,較慢
UNION ALL直接合併,保留重複列無排序,效能最佳

對應的集合概念:UNION = 並集,INTERSECT = 交集,MINUS = 差集。

6. 實務建議

  • 優先使用 ANSI 標準語法(JOIN ... ON),可讀性高且可攜性佳。
  • 明確指定連接類型(INNER/LEFT/RIGHT),避免隱性轉換導致執行計畫偏差。
  • 大量資料連接時,確保連接欄位有索引,並收集統計資訊供優化器參考。
  • 除非確定需要去重,否則一律使用 UNION ALL 提升效能。

結語

熟練掌握各類連接語法與適用場景,是撰寫高效 SQL 的關鍵。建議開發者在實務專案中多加練習,並善用執行計畫(EXPLAIN PLAN)驗證連接策略。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved