expr

交集 并集 补集 差集(幼儿园什么是并集交集补集差集)

大家在利用SQL语言查询数据库数据时,往往会采用一些匹配及过滤的手段来获取需要的数据,SQL可以看成是一种面向集合的语言,查询可以理解为不断的从集合中进行匹配及过滤,从而得到最终想要的结果集。今天就给大家介绍一下利用SQL进行集合的相关运算,如:求集合的并集、交集、差集、异或集。

下面我们用以下两个表的数据来进行演示,java_course_student表和python_course_student表,两个表分别存放着选了java课程的学生和选了python课程的学生。两张表的结构及数据如下所示:

并集

并集就是求两个集合元素的总和,如下图黄色部分就是集合A和集合B的并集。

本例中求并集可以理解为:求选了java或python课程的所有学生,在求并集时可以使用【UNION】运算符,其作用是把两个结构一致的结果集合并起来。相比于【JOIN】的横向连表,【UNION】可以理解为纵向连表。【UNION】会将合并结果进行去重,如果不去重的话可以使用【UNION ALL】运算符,如果确定数据不会重复或接受重复的结果集时,尽量选用【UNION ALL】,因为去重的【UNION】会进行排序,性能会稍差一些。求并集的具体SQL和结果如下:

交集

交集就是求两个集合之间共同的元素,如下图的黄色部分就是集合A和集合B的交集。

本例中求交集可以理解为:求即选了java又选了python课程的学生。因为学生的id(student_id)唯一确定了学生,所以本文中求交集可以采用【INNER JOIN】和【EXISTS】运算符,并通过student_id的关联来求交集。求交集的具体SQL和结果如下:

差集

差集是求两个集合之间元素的差异,集合A差集合B表示求集合A中排除掉集合B中元素后剩下的元素。差集是有顺序性的,比如:集合A差集合B和集合B差集合A有可能是不一样的。如下图的黄色部分就分别表示了集合A差集合B和集合B差集合A的结果:

本例中把java_course_student表当做集合A,把python_course_student表当做集合B,那集合A差集合B就代表了选择了java课程但没有选择python课程的学生;同理,集合B差集合A代表选择了python课程但没有选择java课程的学生。求差集可以采用左右外连接【LEFT JOIN】或【RIGHT JOIN】,左右外链接可以保证左边或右边的集合是全的,右边或左边的数据存在NULL,所以再加上【IS NULL】的判断就可以实现集合的差集运算了。求差集的SQL和结果如下:

另外,求差集还可以采用【NOT EXISTS】运算符来实现,用【NOT EXISTS】实现集合A差集合B的SQL和结果如下:

异或集

异或集,有的又叫交补集,是求两个集合互为不一样的元素,可以理解为两个集合交集对并集的补给。如下图的黄色部分就是集合A和集合B的异或集:

本例中求异或集,可以理解为求没有同时选择java和python两门课程的学生。异或集的求法可以从定义出发,一种方法是先分别求两个集合相互之间的差集,然后再求两个差集的并集;另一种方法是先求两个集合的并集和交集,再求并集对交集的差集。以第一种方式求异或集的SQL和结果如下:

------ The End ------

温馨提示:本文内容由互联网用户自发贡献,该文观点仅代表作者本人,如有侵权,请联系删除!