SQL Server Union(并集)
SQL Server union 是一组集合操作,用于将两个select语句的结果组合到一个结果集中,该结果集包括属于union中select语句的所有行。
语法:
query_1
UNION
query_2
要求:
-两个查询中列的数量必须相同
-相应列的数据类型必须相同或兼容
UNION与UNION ALL
默认情况下,UNION运算符从结果集中删除所有重复的行。如果要保留重复的行,则需要明确指定all关键字,也就是说,union删除重复行,而union all包含重复行。
query_1
UNION ALL
query_2
Union与join
Inner join和left join等连接组合了连个表中的列,而union组合了两个查询中的行。
即:join是水平附加结果集,union是垂直附加结果集
1.union和union all实例
将成绩表中的课程号和学生表中的学生号合并到一个列表中:
select cno
from sc
union
select sno
from student
如上图所示 ,sc(成绩表)中cno有十行,student表中sno有10行
但是,把成绩表中的课程号和学生表中的学生号合并到一个列表后只有13行,因为sc表中查出来的有重复行,union会删除重复行。
要包含重复行,请使用union all,如下图所示:
- union 和order by示例
要对union运算符返回的结果集进行排序,请将order by子句放在最后一个查询中,如:
SELECT
select_list
FROM
table_1
UNION
SELECT
select_list
FROM
table_2
ORDER BY
order_list;
如果语句包含 UNION、INTERSECT 或 EXCEPT 运算符,则 ORDER BY 项必须出现在选择列表中。
可以理解为,如下图所示,
A集合中有3个数1,2,3,B集合中也有三个数3,4,5,
UA{1,2,3} UB{3,4,5} C是A和B的重复行
用union合并起来得到的应该是UA+B={1,2,3,3,4,5},但是union会删除重复行C
所以A+B得到的是UA+B={1,2,3,4,5},要想得到UA+B={1,2,3,3,4,5}则必须使用union all
Union会垂直附加结果集,下面是使用union合并的结果集:
1 |
2 |
3 |
4 |
5 |
下面是使用union all合并的结果集:
1 |
2 |
3 |
3 |
4 |
5 |