Union 和 Union all都可以用于把多个select出来的结果集合并,但是又有区别。
1、Union:重复的数据合并成一条
Union all:不合并相同的数据,将多个select检索出的数据原原本本返回。
2、例:
UNION
UNION前后检索数据一样 UNION前后检索数据不一样
UNION ALL
UNION ALL前后检索数据一样 UNION ALL前后检索数据不一样
注意 UNION 是对结果集进行去重
sql1:SELECT 1 a, 22 b, 3 c FROM dual UNION ALL SELECT 5 a, 5 b, 5 c FROM dual --结果
sql2:SELECT 1 a, 2 b, 3 c FROM dual
UNION ALL SELECT 1 a, 2 b, 3 c FROM dual
UNION ALL SELECT 5 a, 5 b, 5 c FROM dual --结果
--sql1 sql2 临时表。用临时表创建测试数据
--sql1 : SELECT 1 a, 22 b, 3 c FROM dual UNION ALL SELECT 5 a, 5 b, 5 c FROM dual
--sql2 : SELECT 1 a, 2 b, 3 c FROM dual UNION ALL SELECT 1 a, 2 b, 3 c FROM dual UNION ALL SELECT 5 a, 5 b, 5 c FROM dual
--验证sql
WITH sql1 AS (SELECT 1 a, 22 b, 3 c FROM dual UNION ALL SELECT 5 a, 5 b, 5 c FROM dual )
,sql2 AS (SELECT 1 a, 2 b, 3 c FROM dual UNION ALL SELECT 1 a, 2 b, 3 c FROM dual UNION ALL SELECT 5 a, 5 b, 5 c FROM dual )
SELECT * FROM sql1
UNION
SELECT * FROM sql2
从执行结果来看,不仅去除了sql1和sql2的重复数据,sql2本身的重复数据也被去除了。