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

MySQL JOIN 與 UNION 實戰詳解:圖解連接類型與集合操作差異

     編輯:MySQL 綜合教學

核心差異一句話

  • JOIN:橫向拼欄——兩表按條件匹配,產生「寬表」(欄數 = 表1欄數 + 表2欄數)
  • UNION:縱向疊列——兩查詢結果集疊加,產生「長表」(欄數固定,行數 = 結果1行數 + 結果2行數)

JOIN 七大類型圖解(以 A、B 兩表,關聯鍵 id)

JOIN 類型文氏圖

類型關鍵字結果集文氏圖區域
內連接INNER JOIN / JOINA∩B(雙方都有匹配)交集
左連接LEFT JOINA 全部 + B 匹配(無則 NULL)A 圓完整
右連接RIGHT JOINB 全部 + A 匹配B 圓完整
全連接FULL JOIN (MySQL 不支援,用 UNION 模擬)A∪B兩圓並集
左獨有LEFT JOIN ... WHERE B.id IS NULLA - BA 月牙
右獨有RIGHT JOIN ... WHERE A.id IS NULLB - AB 月牙
交叉連接CROSS JOINA×B(笛卡爾積)矩形全域

實戰範例

  規則UNIONUNION ALL
  
    去重是(排序+唯一)否
    效能慢(臨時表+排序)快(直接疊加)
    欄數必須相同必須相同
    欄型別建議一致,隱式轉換建議一致
    欄名稱以第一個 SELECT 為準以第一個 SELECT 為準
    ORDER BY / LIMIT需用括號包裹子查詢,或放在最後同左
  


UNION 實戰範例

進階:UNION 內部執行機制

  • MySQL 建立臨時表(Memory/InnoDB),依次執行子查詢寫入
  • UNION:寫入前檢查重複(哈希/排序),UNION ALL:直接追加
  • 最終讀取臨時表返回結果
  • 因此:子查詢的 ORDER BY 無意義,只有最外層 ORDER BY 生效

小結

JOIN 橫向拼欄、UNION 縱向疊列。JOIN 看文氏圖選類型;UNION 業務無重疊用 ALL,有重疊用 DISTINCT(預設)。記住:ORDER BY/LIMIT 只寫在最外層,子查詢加括號。

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