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

MySQL 集合操作 UNION 與 UNION ALL 完整指南

     編輯:MySQL 綜合教學

MySQL 集合操作 UNION 與 UNION ALL 完整指南

集合操作屬於垂直操作,將多個查詢結果上下合併。MySQL 支援 UNION DISTINCT(預設)與 UNION ALL 兩種模式。

前置測試資料

CREATE TABLE table1 (
  aid INT NOT NULL AUTO_INCREMENT,
  title VARCHAR(20),
  tag VARCHAR(10),
  PRIMARY KEY(aid)
) ENGINE=INNODB DEFAULT CHARSET=UTF8;

CREATE TABLE table2 (
  bid INT NOT NULL AUTO_INCREMENT,
  title VARCHAR(20),
  tag VARCHAR(10),
  PRIMARY KEY(bid)
) ENGINE=INNODB DEFAULT CHARSET=UTF8;

INSERT INTO table1 (title, tag) VALUES ('article1','MySQL'),('article2','PHP'),('article3','CPP');
INSERT INTO table2 (title, tag) VALUES ('article1','MySQL'),('article2','CPP'),('article3','C');

UNION DISTINCT(預設 UNION)

合併兩個結果集並去除重複行(所有欄位完全相同視為重複)。

(SELECT * FROM table1) UNION (SELECT * FROM table2);

結果:article1 MySQL 僅出現一次。

實現機制:建立臨時表 → 加唯一索引 → 插入資料 → 返回結果。因唯一索引去重,插入效能稍受影響。

UNION ALL

合併結果集但不去重,保留所有行。若確定無重複或允許重複,效能優於 UNION。

(SELECT * FROM table1) UNION ALL (SELECT * FROM table2);

結果:article1 MySQL 出現兩次。

使用建議

  • 需去重 → UNION(或 UNION DISTINCT)。
  • 確無重複或允許重複 → UNION ALL,避免唯一索引開銷。
  • 多個 SELECT 欄位數、型別需一致;結果欄位名以第一個 SELECT 為準。

總結

集合操作是垂直合併資料的利器。根據業務是否需要去重,選擇 UNION 或 UNION ALL,能在正確性與效能間取得平衡。

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