1,集合
SQL Server 的集合包括交集 (INTERSECT),并集(UNION),差集(EXCEPT)
#INTERSECT
限制条件
• 子结果集具有相同结构。
• 子结果集数据类型可以兼容。
• 子结果集不包含 order by 和 compute 子句。
Select * from table1
intersect
select * from table2
#UNION
Select * from table1
UNION
select * from table2
#会去掉重复项目
#UNION ALL
Select * from table1
UNION ALL
select * from table2
#EXCEPT
可以对两个或多个结果集进行连接,形成“差集”。返回左边结果集合中已经有的记录,而右边结果集中没有的记录。
Select * from table1
EXCEPT
select * from table2
2,分组集
多个分组列的聚合,等价于多个分组“union all”
sql sever的分组集共有三种:grouping set; cube; rollup
#grouping sets
假设sales表字段 id,city,salesvalue,需要统计按照id,city汇总的销售额
#union all 写法
select id,null,sum(salesvalue) from sales
group by id
union all
select null,city,sum(salesvalue) from
sales
group by city
#grouping sets写法
select id,city
sum(salesvalue)
from sales
group by grouping sets(id,city)
#rollup
select id,city
sum(salesvalue)
from sales
group by grouping sets(id,city) with rollup
#在grouping sets的基础上,对所有的数据再进行一次汇总
#cube
select id,city
sum(salesvalue)
from sales
group by id,city with cube
#在 ROLLUP 的基础上,还会将第一列每组的汇总数据额外显示在最后