SQL基础总结(八):集合操作

本系列blog源自前年写的SQL学习笔记,汇总一下发上来。(1月份发了前三篇笔记,原以为后面的笔记误操作删了,今天在硬盘里又找到了,一起发上来)

--------------------------------

使用UNION合并行

UNION操作将两个查询返回的结果合并成一个结果。UNION从结果中去掉重复的行,UNION ALL不去掉重复的行。

两个查询的SELECT子句列出的列(列名、计算表达式、聚合函数)必须数量相等。

两个查询对应的列必须有相同的顺序。

对应的列必须是相同的数据类型,或隐式转换为相同的数据类型。

大多数DBMS采用UNION语句第一个查询的列名作为结果的列名。

ORDER BY子句只能出现在UNION语句最后的查询中。对最后合并的结果进行排序,最简单的方法是使用相对列位置来确定排序,ORDER BY 1 ASC;

GROUP BYHAVING只能用于单独的查询,他们不能用于影响最终结果。

Statement1

UNION [ALL]

Statement2;

UNION是可交换操作的,A UNION BB UNION A是相同的。

如果在一条语句中将UNIONUNION ALL混合使用,要使用括号来明确运算顺序,因为UNION ALL不排除重复行。

 

对于UNION操作,DBMS按内部顺序来确定和去掉重复行,因此即使没有使用ORDER BY子句,UNION的结果可能也会排序。UNION ALL因为不需要去掉重复的行,所以不排序。排序计算的消耗很大——若使用UNION ALL能实现,就不要使用UNION

 

使用INTERSECT查找相同行

使用INTERSECT操作将两个查询的结果中相同的行并成一个结果,即交集。

Statement1

INTERSECT

Statement2;

Statement1Statement2都是SELECT语句,两个查询中列的数量和顺序必须相同,对应列的数据类型必须兼容。

结果中重复的行将被去掉。

INTERSECT是可交换操作,A INTERSECT BB INTERSECT A是相同的。

DBMS如果不支持INTERSECT可以使用INNER JOINEXISTS子查询。

 

使用EXCEPT查找不同行

EXCEPT操作,也称为差操作。将两个属性中只属于第一个查询的行作为结果。

A EXCEPT B包含属于表A但不属于表B的行。

Statement1

EXCEPT

Statement2;

 

EXCEPT为不可交换项。

如果DBMS不支持EXCEPT,可以使用外联结、NOT EXISTS子查询、NOT IN子查询代替它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值