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

MySQL 兩表合並查詢:UNION 與 UNION ALL 差異圖解

     編輯:MySQL 綜合教學

MySQL 兩表合並查詢:UNION 與 UNION ALL 差異圖解

UNION 與 UNION ALL 均用於將多個 SELECT 結果集合併,核心差異在於**是否去重**。

測試表結構

CREATE TABLE student (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  name VARCHAR(20) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE student1 (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  name VARCHAR(20) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

場景一:欄位數一致,直接合並

SELECT id, name FROM student
UNION ALL
SELECT id, name FROM student1;

結果:保留所有行,包含重複的 id=1, name='Jack'。

場景二:欄位數不一致,用常數補齊

SELECT id, name FROM student
UNION ALL
SELECT 0 AS id, name FROM student1;

結果:student1 所有行的 id 顯示為 0,便於區分來源。

場景三:UNION 去重效果

SELECT id, name FROM student
UNION
SELECT id, name FROM student1;

結果:重複行(如 id=2, name='Jack')僅保留一行,**來源為 student1 的 Jack 被去除**。

效能與選擇建議

操作去重效能適用場景
UNION是(排序+唯一)較慢業務要求結果唯一、資料量較小
UNION ALL否快(無排序)已知無重複、或允許重複、大數據量合並

注意事項

  • 所有 SELECT 必須**欄位數相同**、**對應位置類型兼容**。
  • ORDER BY、LIMIT 需加括號包裹整個 UNION,或放在最後一個 SELECT(MySQL 8.0+ 支援全局 ORDER BY)。
  • 字符集、排序規則不一致可能導致隱式轉換錯誤,建議統一 CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved