SQL进阶教程——用SQL进行集合运算(第七章)

本文详细探讨了SQL中的集合运算,包括UNION、INTERSECT、EXCEPT的用法,强调了ALL选项对于重复行的影响以及性能差异。文章还指出SQL在关系除法运算上的不足,提供了实现关系除法的策略,并讨论了集合相等性的检查。此外,还介绍了如何查找相等子集以及高效删除重复行的方法。
摘要由CSDN通过智能技术生成

1. 前言

集合论是SQL语言的根基——这是贯穿全书主题之一。因为他的这个特性,SQL也被称为面向集合语言。只有从集合的角度思考,才能明白SQL的强大。
但是,实际上这一点长期以来都被很多人忽略了。造成这种状况,SQL本身也是要负一定责任的。其实,在很长一段时间内,SQL连我们在高中学习过的基础的集合运算符都没有。UNION是SQL-86标准开始加入的,还算比较早,而INTERSECT和EXCEPT都是SQL-92标准才加入的。至于关系除法,更是至今还没有被标准化。

2. 集合运算的几个注意事项

  1. SQL能操作具有重复行的集合,可以通过可选项ALL来支持
    一般的集合论是不允许集合里存在重复元素的,因此集合{1,1,2,3,3,3}和集合{1,2,3}被视为相同的集合。但是关系数据库里的表允许存在重复的行,称为多重集合。
    因此,SQL的集合运算符也提供了允许重复和不允许重复的两种用法。如果直接使用UNION和INTERSECT,结果里就不会出现重复行。如果想在结果里留下重复行,可以加上可选项ALL,写作UNION ALL。
    出了运算结果之外,这两种用法还有一个不同。集合运算符为了排除重复行,默认的会发生排序,而加上可选项ALL之后就不会排序,所以性能会有提升。如果不关心结果是否存在重复行,或者确认结果不会产生重复行,可以加上ALL
  2. 集合运算符有优先级
    标准SQL规定,INTERSECT比UNION和EXCEPT优先级更高。因此,当同时使用UNION和INTERSECT,又想让UNION优先执行时,必须用括号明确的指定运算顺序。
  3. 各个DBMS提供商在集合运算的实现程度上参差不齐
  4. 除法运算没有标准定义

3. 比较表和表:检查集合相等性之基础表

这里说的“相等”指的是行数和列数以及内容都相同,即是“同一个集合”的意思

select count(1) row_cnt
  from ( select * 
           from tbl_A
           union 
          select *
            from tbl_b
        ) tmp
;

4. 比较表和表:检查集合相等性之进阶篇

SELECT CASE WHEN COUNT(*) = 0 THEN '相等'
			ELSE ‘不相等’
			END AS result
FROM (
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值