MySQL实现交集查询和差集查询以及对称差查询MySQL实现交集查询和差集查询以及对称差查询
⽂章⽬录
0x00 集合操作
集合操作的种类有三种,分别是:
1、并集操作(UNION)
2、交集操作(INTERSECT)
3、差集操作(EXCEPT)
参加集合操作的各查询结果的列数必须相同,对应项的数据类型也必须相同。
假设两个集合分别是A和B,这三种操作的⽰意图如下:
0x01 数据库中的集合查询
集合操作在数据库中的应⽤是集合查询,同样有三种:
1、并集查询
2、交集查询
3、补集查询
以table1和table2两张表为例,进⾏查询:
table1:
table2:
1、并集查询
在Oracle、SQL Server、MySQL数据库中,均可以使⽤UNION关键字进⾏并集查询
SELECT*FROM table1
UNION
SELECT*FROM table2
或
SELECT*FROM table1
UNION ALL
SELECT*FROM table2
UNION和UNION ALL谓词的差别:
UNION:将多个查询结果合并起来时,系统⾃动去掉重复元组。
UNION ALL:将多个查询结果合并起来时,保留重复元组。
UNION相当于在进⾏联合查询时,使⽤了SELECT DISTINCT语句。
2、交集查询
在Oracle和SQL Server中,使⽤INTERSECT关键字进⾏交集查询
SELECT*FROM table1
INTERSECT
SELECT*FROM table2
在MySQL中,不⽀持INTERSECT关键字,因此查询会报错
3、补集查询
在Oracle中,使⽤MINUS关键字进⾏补集查询
SELECT*FROM table1
MINUS
SELECT*FROM table2
在SQL Server中,使⽤EXCEPT关键字进⾏补集查询
SELECT*FROM table1
EXCEPT
SELECT*FROM table2
在MySQL中,不⽀持EXCEPT关键字,因此查询会报错
0x02 MySQL的交集查询、差集查询和对称差查询的实现⽅式
因为MySQL不⽀持MINUS/EXCEPT和INTERSECT关键字,所以解决⽅案是使⽤JOIN关键字来达到相同的效果。
在MySQL中可以⽤内连接(INNER JOIN)和左外连接(LEFT JOIN)代替交集操作(INTERSECT)和差集操作(EXCEPT)1、交集查询
内连接INNER JOIN可以对两个或多个结果集进⾏连接,返回左边结果集和右边结果集中都有的记录,形成“交集”。
distinct查询SELECT table1.*FROM table1
INNER JOIN table2
del = del
或
SELECT table1.*FROM table1
JOIN table2
del = del
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论