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

Oracle 連接查詢完全指南:內連接、外連接與全連接詳解

     編輯:Oracle 資料庫基礎

前言

在 Oracle 資料庫操作中,連接查詢是多表關聯的核心技術。無論是 Oracle 還是其他主流資料庫(如 MySQL、PostgreSQL、SQL Server),都支援三種基本連接方式:內連接、外連接、全連接。掌握它們的差異與適用場景,能讓你撰寫出更精準、高效的 SQL。

一、內連接

內連接是最常用的查詢方式,只返回兩張表中符合連接條件的匹配記錄。若某筆資料在另一張表找不到對應值,則不會出現在結果集中。

語法範例

-- ANSI SQL-92 標準語法(推薦)
SELECT * FROM dept d INNER JOIN employee e ON d.deptid = e.deptid;

-- Oracle 傳統語法
SELECT * FROM dept d, employee e WHERE d.deptid = e.deptid;

特點

  • 僅輸出雙方都存在的資料
  • 效率通常優於外連接
  • 適用於「必須雙方都有資料」的業務場景(如:訂單必須關聯客戶)

二、外連接

外連接分為左外連接、右外連接,核心在於保留主表的所有記錄,即使從表無匹配資料,主表欄位仍會顯示,從表欄位則填充 NULL。

場景說明

假設有兩張表:

  • 部門表:dept(deptid, deptName) —— 1 開發部、2 財務部、3 人事部
  • 職工表:employee(eid, deptid, eName) —— 劉德華(1)、張惠妹(1)、張學友(5)

注意:職工表中 deptid=5 的部門在部門表不存在;部門表中 deptid=3(人事部)無對應職工。

左外連接 —— 以左表為主

SELECT * FROM dept d LEFT OUTER JOIN employee e ON d.deptid = e.deptid;

結果:列出所有部門,人事部會顯示,職工欄位為 NULL;張學友因部門不存在,不會出現。

右外連接 —— 以右表為主

SELECT * FROM dept d RIGHT OUTER JOIN employee e ON d.deptid = e.deptid;

結果:列出所有職工,張學友會顯示,部門欄位為 NULL;人事部無職工,不會出現。

三、全連接

全連接是左外連接與右外連接的並集,會返回兩張表所有的記錄,無論是否匹配。

語法

SELECT * FROM dept d FULL OUTER JOIN employee e ON d.deptid = e.deptid;

結果:包含人事部(無職工)、張學友(無部門)、以及匹配的開發部與職工。

總結對照表

連接類型保留資料適用場景
INNER JOIN僅匹配行雙方必須有資料的強關聯
LEFT JOIN左表全部主表為主,從表可能為空(如:部門-員工)
RIGHT JOIN右表全部從表為主,主表可能為空
FULL JOIN雙表全部需完整保留雙方資料,做差異比對

最佳實踐建議

  1. 優先使用 ANSI SQL-92 標準語法(JOIN ... ON),可讀性高、可移植。
  2. 明確業務需求再選擇連接類型,避免濫用 FULL JOIN 造成效能負擔。
  3. 大表連接時,確保連接欄位有索引,並考慮使用 /*+ LEADING */ 等 Hint 引導執行計畫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved