集合操作屬於垂直操作,將多個查詢結果上下合併。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');
合併兩個結果集並去除重複行(所有欄位完全相同視為重複)。
(SELECT * FROM table1) UNION (SELECT * FROM table2);
結果:article1 MySQL 僅出現一次。
實現機制:建立臨時表 → 加唯一索引 → 插入資料 → 返回結果。因唯一索引去重,插入效能稍受影響。
合併結果集但不去重,保留所有行。若確定無重複或允許重複,效能優於 UNION。
(SELECT * FROM table1) UNION ALL (SELECT * FROM table2);
結果:article1 MySQL 出現兩次。
UNION(或 UNION DISTINCT)。UNION ALL,避免唯一索引開銷。集合操作是垂直合併資料的利器。根據業務是否需要去重,選擇 UNION 或 UNION ALL,能在正確性與效能間取得平衡。