1. 简介
Union 是 SQL 中用来合并两个或多个 SELECT 语句结果的关键字,它可以将两个或多个表中的记录合并在一起形成一个更大的表。
1.1 Union 和 Union All 的区别
Union 和 Union All 都可以将多个查询结果合并,不过它们之间有一个很大的区别:Union 会去掉重复记录,而 Union All 则不会。
SELECT column1, column2, ... FROM table1
UNION
SELECT column1, column2, ... FROM table2;
以上查询语句会将 table1 和 table2 中的记录合并,如果有重复记录,则只返回一条。
SELECT column1, column2, ... FROM table1
UNION ALL
SELECT column1, column2, ... FROM table2;
以上查询语句同样会将 table1 和 table2 中的记录合并,不过即使有重复记录,也会将所有结果返回。
2. Union 用法
2.1 合并相似表的数据
Union 可以将两个或多个相同结构的表中的数据合并为一个结果集。
SELECT column1, column2, ... FROM table1
UNION
SELECT column1, column2, ... FROM table2;
以上查询会将 table1 和 table2 中的相同列的记录合并。
当表的结构不完全一致时,可以使用别名来对齐字段,如:
SELECT column1, column2, ... FROM table1
UNION
SELECT column3 AS column1, column4 AS column2, ... FROM table2;
以上语句会将 table1 中的 column1 和 column2 与 table2 中的 column3 和 column4 合并。
2.2 合并不同条件的查询结果
Union 可以将不同条件下的查询结果合并为一个结果集。
SELECT column1, column2, ... FROM table1 WHERE condition1
UNION
SELECT column1, column2, ... FROM table1 WHERE condition2;
以上查询会将 table1 中满足 condition1 和 condition2 条件的记录合并为一个结果集。
2.3 合并多个查询条件查询的结果集
Union 可以将多个查询条件查询的结果集合并为一个结果集。
SELECT column1, column2, ... FROM table1 WHERE condition1
UNION
SELECT column1, column2, ... FROM table1 WHERE condition2
UNION
SELECT column1, column2, ... FROM table1 WHERE condition3;
以上查询会将 table1 中满足 condition1、condition2 和 condition3 条件的记录合并为一个结果集。
3. 注意事项
使用 Union 时需要注意以下几点:
Union 只能用于查询语句。在更新表格等 SQL 操作中不能使用
Union 查询的结果集的列数必须相同
Union 查询的结果集的列名可以和第一个查询结果集中的列名相同,或者使用别名对齐
Union 查询的结果集的数据类型必须相同或兼容
Union 查询中列的顺序必须相同或兼容
4. 总结
Union 是 SQL 中一个非常实用的关键字,它可以实现多种不同场景下的数据合并操作。我们需要注意 Union 用法时的细节问题,比如列数相同、列名相同或使用别名对齐、数据类型相同或兼容等。