SQL学习之“集合运算”

本文深入探讨了SQL中的集合运算,包括UNION、INTERSECT(使用INNER JOIN替代)、EXCEPT(使用NOT IN替代)以及对称差的概念,并详细介绍了内连结、外连结、自连结、自然连结的用法,还提供了多表连结和交叉连结的解释。此外,通过实例解析了如何运用这些操作解决实际查询问题。
摘要由CSDN通过智能技术生成

本篇文章记录学习SQL集合运算的过程与心得。

对于集合这个概念,印象最深的就是数学课里学的,简单的说就是把研究对象当做元素,则一些元素组成的整体就叫集合。

而在数据库领域,则表示记录的集合,具体来说,表、视图和查询的执行结果都是记录的集合, 其中的元素为表或者查询结果中的每一行。像UNION,INTERSECT, EXCEPT这种用来进行集合运算的运算符称为集合运算符。在数据库中, 所有的表--以及查询结果--都可以视为集合。

1、表的加减法

UNION就是相当于2个表的并集,但是 UNION 等集合运算符通常都会除去重复的记录。若想包含重复行,使用集合运算 UNION ALL方法即可。

使用 UNION 对两个查询结果取并集, 和在一个查询中使用 WHERE 子句, 然后使用 OR 谓词连接两个查询条件, 能够得到相同的结果。

示例:

找出毛利率不足 30%或毛利率未知的商品的语句如下所示。

 

通常来说, 我们会把类型完全一致, 并且代表相同属性的列使用 UNION 合并到一起显示, 但有时候, 即使数据类型不完全相同, 也会通过隐式类型转换来将两个类型不同的列放在一列里显示, 例如字符串和数值类型。

集合的交, 就是两个集合的公共部分, 由于集合元素的互异性, 集合的交只需通过文氏图就可以很直观地看到它的意义。

 但是MySQL 目前不支持INTERSECT操作,可以用INNER JOIN来代替。

集合的差集

求集合差集的减法运算和实数的减法运算有些不同, 当使用一个集合A减去另一个集合B的时候,对于只存在于集合B而不存在于集合A的元素, 采取直接忽略的策略,因此集合A和B做减法只是将集合A中也同时属于集合B的元素减掉。

MySQL目前也不支持表的减法运算符 EXCEPT,不过, 借助NOT IN 谓词, 同样可以实现表的减法。

对称差

两个集合A,B的对称差是指那些仅属于A或仅属于B

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值