MySQL UNION 用于把来自多个 SELECT 语句的结果组合到一个结果集合中。
CREATE TABLE group1(
name VARCHAR(11) PRIMARY KEY
)
ALTER TABLE group1 ADD COLUMN
age INT(3)
SELECT *
FROM group1
INSERT INTO group1 (name, age) VALUE ("张三", 21)
INSERT INTO group1 (name, age) VALUE ("李四", 22)
INSERT INTO group1 (name, age) VALUE ("王五", 23)
CREATE TABLE group2(
name VARCHAR(11) PRIMARY KEY,
age INT(11)
)
SELECT *
FROM group2
INSERT INTO group2 (name, age)
VALUES ("张三", 21), ("李四", 22), "赵六", 23)
这两张表唯一的不同就是数据中,一个是“王五”,一个是“赵六”。
SELECT name, age FROM group1
UNION ALL
SELECT name, age FROM group2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zAJpGTkh-1621611510690)(https://i.loli.net/2021/05/21/c9dfKUpi2Xv6FAB.png)]
可以看出,union all 没有去重,查出了两个“张三”和“李四”;
SELECT name, age FROM group1
UNION
SELECT name, age FROM group2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vFf8TTjS-1621611510693)(https://i.loli.net/2021/05/21/5Qwhlb7FqG9j1nL.png)]
由此可见,“张三”和“李四”被去重了。
EXPLAIN
SELECT name, age FROM group1
UNION ALL
SELECT name, age FROM group2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FSvs2pL0-1621611510698)(https://i.loli.net/2021/05/21/EUYjN9JvhQn387t.png)]
EXPLAIN
SELECT name, age FROM group1
UNION
SELECT name, age FROM group2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NlvioAxv-1621611510701)(https://i.loli.net/2021/05/21/owSxZf46D9Xivnb.png)]
通过性能分析可得出,union比union all 多做了操作。由此得结论: