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

SQL JOIN 總覽:四大聯結類型完整比較與選擇指南

     編輯:SQL 基礎

SQL JOIN 聯結總覽


SQL JOIN 依據共同欄位將兩個或多個表的資料列結合。掌握四大基本聯結類型,是撰寫高效查詢的關鍵基礎。


四大 JOIN 類型快速比較

類型關鍵字回傳結果視覺化
內部聯結 INNER JOIN / JOIN 僅雙方都符合條件的列 🔵∩🔴
左外部聯結 LEFT JOIN / LEFT OUTER JOIN 左表所有列 + 右表符合列(無則 NULL) 🔵⊇🔴
右外部聯結 RIGHT JOIN / RIGHT OUTER JOIN 右表所有列 + 左表符合列(無則 NULL) 🔵⊆🔴
全外部聯結 FULL JOIN / FULL OUTER JOIN 雙方所有列(無對應則 NULL) 🔵∪🔴

演示資料庫:RUNOOB 範例資料

Websites 表

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘寶         | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鳥教程     | https://www.runoob.com/    | 4689  | CN      |
| 4  | 微博         | https://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow| https://stackoverflow.com/ | 0     | IND     |
+----+--------------+---------------------------+-------+---------+

access_log 表

+-----+---------+-------+------------+
| aid | site_id | count | date       |
+-----+---------+-------+------------+
| 1   | 1       | 45    | 2016-05-10 |
| 2   | 3       | 100   | 2016-05-13 |
| 3   | 1       | 230   | 2016-05-14 |
| 4   | 2       | 10    | 2016-05-14 |
| 5   | 5       | 205   | 2016-05-14 |
| 6   | 4       | 13    | 2016-05-15 |
| 7   | 3       | 220   | 2016-05-15 |
| 8   | 5       | 545   | 2016-05-16 |
| 9   | 3       | 201   | 2016-05-17 |
+-----+---------+-------+------------+

關聯鍵:Websites.id = access_log.site_id


INNER JOIN 實戰示範

SELECT Websites.id, Websites.name, access_log.count, access_log.date
FROM Websites
INNER JOIN access_log
ON Websites.id = access_log.site_id;

輸出結果:

僅 9 筆有對應訪問記錄的網站資料。


選擇 JOIN 類型的決策樹

  1. 是否需要保留左表所有資料? 是 → LEFT JOIN;否 → 繼續第 2 步。
  2. 是否需要保留右表所有資料? 是 → RIGHT JOIN(或交換表順序用 LEFT JOIN);否 → 繼續第 3 步。
  3. 是否需要保留雙表所有資料? 是 → FULL OUTER JOIN;否 → INNER JOIN。

實務最佳實務

  • 統一使用 LEFT JOIN:將「保留哪一邊」語意放在左側,團隊協作更一致。
  • 明確列出欄位:避免 SELECT *,減少網路傳輸與避免欄位名稱衝突。
  • 使用表別名:FROM Websites w LEFT JOIN access_log a ON w.id = a.site_id,簡潔易讀。
  • 聯結條件加索引:ON 欄位若無索引,大表聯結極慢。

進階:多表聯結順序影響效能

優化器通常會自動重排,但寫法上建議:先用 WHERE 過濾大表,再聯結小表;或用 CTE 預先縮小中間結果集。

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