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

圖解 MySQL JOIN:INNER、LEFT、RIGHT、FULL OUTER 與 CROSS JOIN 視覺化指南

     編輯:MySQL 綜合教學

核心概念:兩張表的關係

假設有兩張表 Table A(左表) 與 Table B(右表),各 4 筆資料,其中 name 欄位有兩筆相同(Pirate、Ninja):

Table A          Table B
id name           id name
1  Pirate         1  Rutabaga
2  Monkey         2  Pirate
3  Ninja          3  Darth Vader
4  Spaghetti      4  Ninja

1. INNER JOIN(內連接)

只回傳兩表 交集:雙方 name 皆匹配的列。

SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name;
-- 結果
id name    id name
1  Pirate  2  Pirate
3  Ninja   4  Ninja
Inner Join 文氏圖

2. FULL OUTER JOIN(全外連接)

回傳兩表 並集:所有列,無匹配處以 NULL 填補。

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name;
-- 結果包含所有 4+4=8 列,無匹配者顯示 NULL
Full Outer Join 文氏圖

3. LEFT OUTER JOIN(左外連接)

回傳 左表全部 + 右表匹配列;右表無匹配則為 NULL。

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name;
-- 結果:A 表 4 列全部保留,Monkey、Spaghetti 對應 B 表欄位為 NULL
Left Outer Join 文氏圖

4. LEFT JOIN + WHERE B.id IS NULL(左表獨有)

找出 僅存在於左表 的資料。

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name
WHERE TableB.id IS NULL;
-- 結果:Monkey、Spaghetti
Left Only 文氏圖

5. FULL OUTER JOIN + WHERE A.id IS NULL OR B.id IS NULL(對稱差集)

找出 雙方各自獨有 的資料(排除交集)。

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name
WHERE TableA.id IS NULL OR TableB.id IS NULL;
-- 結果:Monkey、Spaghetti、Rutabaga、Darth Vader
Symmetric Difference 文氏圖

6. CROSS JOIN(交叉連接 / 笛卡爾積)

無 ON 條件,產生 N × M 組合。兩表各 4 列 → 16 列結果。

SELECT * FROM TableA CROSS JOIN TableB;

⚠ 效能警告: 大表交叉連接會產生海量中間結果,極易導致記憶體溢出或查詢超時。生產環境嚴禁無條件使用,若確需笛卡爾積,請先以子查詢或臨時表過濾縮小資料集。

總結對照表

JOIN 類型結果集含義文氏圖區域
INNER JOINA ∩ B(交集)重疊區
LEFT OUTER JOINA 全集 + B 匹配左圓全體
RIGHT OUTER JOINB 全集 + A 匹配右圓全體
FULL OUTER JOINA ∪ B(並集)兩圓全體
CROSS JOINA × B(笛卡爾積)無法用文氏圖表示
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved