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

MySQL JOIN 連接查詢完整圖解:INNER、LEFT、RIGHT JOIN 差異與實例

     編輯:MySQL 資料庫相關知識

JOIN 是多表關聯查詢核心,理解三種基本連接類型的語義差異,是寫出正確 SQL 的關鍵。

測試資料

表 A表 B
aIDaNumbIDbName
1a2005011112006032401
2a2005011222006032402
3a2005011332006032403
4a2005011442006032404
5a2005011582006032408

關聯條件:A.aID = B.bID

1. INNER JOIN(內連接)

SELECT * FROM A
INNER JOIN B ON A.aID = B.bID;
aIDaNumbIDbName
1a2005011112006032401
2a2005011222006032402
3a2005011332006032403
4a2005011442006032404

特性:僅回傳 **雙方都符合條件** 的列。不以哪張表為基準,純粹取交集。
A 的 5、B 的 8 均無對應 → 不出現。

2. LEFT JOIN(左外連接)

SELECT * FROM A
LEFT JOIN B ON A.aID = B.bID;
aIDaNumbIDbName
1a2005011112006032401
2a2005011222006032402
3a2005011332006032403
4a2005011442006032404
5a20050115NULLNULL

特性:以 **左表(A)為基準**,左表所有列皆保留;右表無對應處以 NULL 填補。
適用:「主表帶明細」,如「所有客戶及其訂單(無訂單也要列出)」。

3. RIGHT JOIN(右外連接)

SELECT * FROM A
RIGHT JOIN B ON A.aID = B.bID;
aIDaNumbIDbName
1a2005011112006032401
2a2005011222006032402
3a2005011332006032403
4a2005011442006032404
NULLNULL82006032408

特性:以 **右表(B)為基準**,右表所有列保留;左表無對應處以 NULL 填補。
LEFT JOIN 與 RIGHT JOIN 互換表順序即可轉換,實務多統一用 LEFT JOIN 以降低認知負荷。

進階:多表連接與效能提示

  • 連接順序影響效能:小表驅動大表、有索引欄位優先連接。
  • STRAIGHT_JOIN 強制按 FROM 順序連接(慎用)。
  • 避免在大表無索引欄位上 JOIN(全表掃描災難)。
  • MySQL 8.0+ 支援 LATERAL JOIN / CTE 簡化複雜邏輯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved