首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL 連接查詢全解析:內聯、左聯、右聯與全聯語法詳解

     編輯:MySQL 資料庫相關知識

在關係型資料庫操作中,多表連接查詢是核心技能之一。SQL 提供了四種基本的連接方式——內聯、左聯、右聯與全聯,各自適用於不同的業務場景。本文將系統梳理這四種連接的語法結構、執行邏輯與效能差異,助你精準選型。

一、內聯(INNER JOIN)

語法範例:

SELECT * FROM 表1 INNER JOIN 表2 ON 表1.userid = 表2.userid;

執行邏輯: 僅返回兩張表中連接欄位值同時存在的行。若 userid 在任一表中缺失,該行將被過濾掉。

效能提示: 內聯等價於舊式寫法 SELECT * FROM 表1, 表2 WHERE 表1.userid = 表2.userid,但現代優化器對 INNER JOIN 的執行計劃通常更優,建議優先使用標準語法。

二、左聯(LEFT OUTER JOIN)

語法範例:

SELECT * FROM 表1 LEFT OUTER JOIN 表2 ON 表1.userid = 表2.userid;

執行邏輯: 以左表(表1)為基準,返回左表所有行;右表中符合條件的行正常顯示,不符合的行以 NULL 填充。常用於「主表全量 + 從表可選」的報表場景。

三、右聯(RIGHT OUTER JOIN)

語法範例:

SELECT * FROM 表1 RIGHT OUTER JOIN 表2 ON 表1.userid = 表2.userid;

執行邏輯: 與左聯鏡像對稱,以右表(表2)為基準,返回右表所有行,左表無匹配處以 NULL 補齊。實務中較少單獨使用,通常透過調換表順序改寫為左聯以統一閱讀習慣。

四、全聯(FULL OUTER JOIN)

語法範例:

SELECT * FROM 表1 FULL OUTER JOIN 表2 ON 表1.userid = 表2.userid;

執行邏輯: 返回兩張表的所有行。雙方匹配的行合併顯示;單獨存在於某表的行,另一側欄位以 NULL 填充。相當於 LEFT JOIN UNION RIGHT JOIN 的去重結果。

五、選型速查表

連接類型返回行來源典型場景
INNER JOIN雙方皆有匹配核心業務關聯查詢(訂單-用戶、商品-分類)
LEFT JOIN左表全量 + 右表匹配報表統計、日誌分析、主從表展示
RIGHT JOIN右表全量 + 左表匹配極少單獨使用,建議改寫為 LEFT JOIN
FULL JOIN雙方全量數據對賬、異構系統數據融合

六、效能與最佳實踐

  • 索引優先: 連接欄位(如 userid)務必建立索引,否則大表連接將觸發全表掃描。
  • 小表驅動大表: 內聯時,將行數較少的表放在左側(或使用 STRAIGHT_JOIN 提示),減少嵌套循環迭代次數。
  • 避免 SELECT *: 明確列出所需欄位,降低網路傳輸與緩衝區壓力。
  • 條件下推: 將過濾條件寫在 ON 子句而非 WHERE,可讓優化器在連接前過濾數據(尤其對外聯有效)。

掌握四種連接的語義差異,能讓你在設計查詢時更精準地表達業務意圖,避免「連接語義錯誤」導致的數據缺失或膨脹問題。

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