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

MySQL JOIN 完全指南:LEFT/RIGHT/FULL/INNER 實戰對比

     編輯:MySQL 資料庫相關知識

外連接三類型

類型關鍵字結果集特徵
左向外連接LEFT JOIN / LEFT OUTER JOIN左表所有行 + 右表匹配行(無匹配則 NULL)
右向外連接RIGHT JOIN / RIGHT OUTER JOIN右表所有行 + 左表匹配行(無匹配則 NULL)
完整外連接FULL JOIN / FULL OUTER JOIN兩表所有行(雙向無匹配均填 NULL)

內連接

僅返回雙方均匹配的行,非匹配行被過濾。

核心差異

  • 內連接:匹配即保留
  • 外連接:至少一方所有行保留(符合 WHERE/HAVING 前提下)

實戰案例(authors ↔ publishers,按 city 連接)

LEFT JOIN:保留所有作者


SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors a LEFT OUTER JOIN publishers p
ON a.city = p.city
ORDER BY p.pub_name, a.au_lname, a.au_fname;

結果:23 行,僅 2 位作者匹配出版社,其餘 pub_name = NULL。

RIGHT JOIN:保留所有出版社


SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors a RIGHT OUTER JOIN publishers p
ON a.city = p.city
ORDER BY p.pub_name, a.au_lname, a.au_fname;

結果:9 行,7 家出版社無匹配作者 → 作者欄位 NULL。

謂詞進一步過濾(右連接 + qty > 50)


SELECT s.stor_id, s.qty, t.title
FROM sales s RIGHT OUTER JOIN titles t
ON s.title_id = t.title_id AND s.qty > 50
ORDER BY s.stor_id;

銷量 ≤ 50 的書名仍保留(來自 titles),但 stor_id/qty = NULL。

FULL JOIN:雙向全保留


SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors a FULL OUTER JOIN publishers p
ON a.city = p.city
ORDER BY p.pub_name, a.au_lname, a.au_fname;

結果:30 行 = 23 作者 + 9 出版社 - 2 匹配 = 30(驗證集合論)。

💡 MySQL 不支援 FULL OUTER JOIN,可用 LEFT JOIN UNION RIGHT JOIN 模擬。本文案例基於 SQL Server,語法標準通用。

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