mysql查询不在数据集合中的数据_数据库中的集合查询

本文介绍了数据库中的集合操作,重点讨论了MySQL中的UNION用于合并行并去重,以及如何使用EXISTS和NOT EXISTS模拟INTERSECT和EXCEPT来查找相同行和不同行。还提到了在MySQL中优化查询的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库中的集合操作主要包括3个方面:

1. Union合并行

union的作用是为了合并两个查询结果,而且在合并的同时把相同的行去重。

例如:

fd0f7b85f19ed549509becb1f467581b.png

如果我们需要显示全部的并集,即不去重,可以使用union all,如下:

e9af85d7040d53ba034b84d3a962258f.png

我们只需要使用union来连接两个select-from-where语句块即可。

union有如下几个注意点:

1)union是可交换的操作,A union B的结果和B union A的结果相同;

2)理论上,select语句块在union中出现的顺序对于运行速度没有影响,但是在实际应用中可能有影响。我们尽量把小表的查询放在union的前面,因为优化器合并中间结果和除去重复行的方式不同。当然,不同的DBMS的影响可能不同;

3)intersect的优先级比union、except要高。其中,intersect是查找相同行,except是查找不同行。这也是和不同DBMS有关的;

4)在可以使用组合的select-from-where语句块的情况下,尽量不要使用union;

5)当union和union all混合使用的时候,要使用括号来明确合并的顺序,因为这涉及到到底哪些查询结果需要合并;

6)即使没有使用order by语句,union的结果也可能是排序的,而union all由于不去重,所以不需要排序。排序需要很多的额外时间,所以我们能使用union all就尽量不使用union;

2. intersect查找相同行

intersect操作是取两个查询结果的相同行。

mySQL不支持intersect,我们可以使用exists谓词来实现相同的功能。

3. except查找不同行

A except B就是查找属于A但是不属于B的查找结果。

mySQL不支持except,我们可以使用not exists、not in等谓词来实现相同的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值