在關係型資料庫操作中,多表連接查詢是核心技能之一。SQL 提供了四種基本的連接方式——內聯、左聯、右聯與全聯,各自適用於不同的業務場景。本文將系統梳理這四種連接的語法結構、執行邏輯與效能差異,助你精準選型。
語法範例:
SELECT * FROM 表1 INNER JOIN 表2 ON 表1.userid = 表2.userid;
執行邏輯: 僅返回兩張表中連接欄位值同時存在的行。若 userid 在任一表中缺失,該行將被過濾掉。
效能提示: 內聯等價於舊式寫法 SELECT * FROM 表1, 表2 WHERE 表1.userid = 表2.userid,但現代優化器對 INNER JOIN 的執行計劃通常更優,建議優先使用標準語法。
語法範例:
SELECT * FROM 表1 LEFT OUTER JOIN 表2 ON 表1.userid = 表2.userid;
執行邏輯: 以左表(表1)為基準,返回左表所有行;右表中符合條件的行正常顯示,不符合的行以 NULL 填充。常用於「主表全量 + 從表可選」的報表場景。
語法範例:
SELECT * FROM 表1 RIGHT OUTER JOIN 表2 ON 表1.userid = 表2.userid;
執行邏輯: 與左聯鏡像對稱,以右表(表2)為基準,返回右表所有行,左表無匹配處以 NULL 補齊。實務中較少單獨使用,通常透過調換表順序改寫為左聯以統一閱讀習慣。
語法範例:
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 提示),減少嵌套循環迭代次數。ON 子句而非 WHERE,可讓優化器在連接前過濾數據(尤其對外聯有效)。掌握四種連接的語義差異,能讓你在設計查詢時更精準地表達業務意圖,避免「連接語義錯誤」導致的數據缺失或膨脹問題。