UNION
UNION 是一个用于合并多个 SELECT 查询结果的操作符。它的作用是将多个查询的结果集合并为一个结果集,并去除重复的行。
主要特点和作用如下:
-
合并结果集:UNION 操作符可以将多个查询的结果集合并为一个结果集。每个查询的结果集必须具有相同的列数和相似的数据类型。
-
去除重复行:与 UNION ALL 操作符不同,UNION 会去除合并结果集中的重复行,只保留一份。它通过对结果集进行去重操作来实现。
-
排序结果:UNION 默认会对合并后的结果集进行排序,以确保返回的结果是按照默认顺序排列的。如果需要自定义排序顺序,可以使用外部的 ORDER BY 子句来指定排序条件。
-
数据类型匹配:在使用 UNION 进行结果集合并时,需要确保每个查询的选择列表中的列具有相似的数据类型,或者可以进行隐式类型转换。否则,可能会导致错误或意外的结果。
使用示例:
Copy code
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2
上述示例中,UNION 操作符将 table1 和 table2 的查询结果合并为一个结果集,并去除重复的行。
需要注意的是,UNION 操作符在进行结果集合并时会进行排序和去重操作,这可能会对性能产生一定的影响。如果确保结果集中不会存在重复的行,并且不需要进行排序,可以考虑使用性能更高的 UNION ALL 操作符。
总结起来,UNION 是用于合并多个查询结果集的操作符,它合并结果集并去除重复行,适用于需要合并结果集并去重的场景。
UNION ALL
UNION ALL 是一个用于合并多个 SELECT 查询结果的操作符。它的作用是将多个查询的结果集合并为一个结果集,包含所有查询的结果,不去除重复行。
主要特点和作用如下:
-
合并结果集:UNION ALL 操作符可以将多个查询的结果集合并为一个结果集。每个查询的结果集必须具有相同的列数和相似的数据类型。
-
保留重复行:与 UNION 操作符不同,UNION ALL 不会去除重复的行。它简单地将所有查询的结果按照顺序连接起来,保留所有行,包括重复的行。
-
性能优化:相对于 UNION 操作符,UNION ALL 的性能更高,因为它不需要进行重复行的去重操作。如果你确定结果集中不会存在重复的行,可以使用 UNION ALL 来获得更好的性能。
适用场景:UNION ALL 适用于需要合并多个查询结果集,并且不需要去除重复行的场景。例如,你可能需要从多个表或查询中检索相似的数据,然后将它们合并到一个结果集中进行进一步的处理或展示。
使用示例:
Copy code
SELECT column1, column2 FROM table1
UNION ALL
SELECT column1, column2 FROM table2
上述示例中,UNION ALL 操作符将 table1 和 table2 的查询结果合并为一个结果集,包含所有行。
需要注意的是,UNION ALL 不会对结果进行排序,默认情况下返回的结果是按照查询的顺序排列的。如果需要对结果进行排序,可以使用外部的 ORDER BY 子句来指定排序条件。
总结起来,UNION ALL 是用于合并多个查询结果集的操作符,它保留所有行,不去除重复的行,适用于需要合并结果集并且不需要去重的场景。
例子
我们需要做的是将这张表转换 成行格式的数据。这里使用UNION ALL来实现。
--列数据转换成行数据:使用UNION ALL
SELECT employee, child_1 AS child FROM Personnel UNION ALL
SELECT employee, child_2 AS child FROM Personnel UNION ALL
SELECT employee, child_3 AS child FROM Personnel;
- 执行结果
因为 UNION All 不会排除重复的行,所以即使吉田没有孩子,结果也会出现3行相关的数据
果里也会出现 3 行相关数据。把结果存入表时,最好先排除掉“child”列 为 NULL 的行。
如果使用UNION
连接,sql 和结果如下
SELECT child_1 FROM Personnel
UNION
SELECT child_2 FROM Personnel
UNION
SELECT child_3 FROM Personnel;
- 执行结果