mysql求差集

本文对比了MySQL中使用NOT EXISTS和LEFT JOIN两种方法求取classinfo和student表中数据不一致的记录。NOT EXISTS在有索引时效率高,但大数据表下慎用;LEFT JOIN通过连接处理一对一或多对一情况,处理不当可能导致结果错误。

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

mysql怎么求差集?

mysql如何查询两个字段数不同的表中数据不一致的记录

一般可用NOT EXISTS(非存在子句)或 LEFT JOIN左(右)连接后所产生空字段值来筛选两表的差集

classinfo表

student表

1、NOT EXISTS

not exists在比对字段有可利用的索引时,其运行效率是非常高,但是如果没有索引的情况下运行在大数据表时,其运行效率极差,这时应避免使用它

SELECT
	* 
FROM
	student a 
WHERE
	NOT EXISTS (SELECT 1 FROM classinfo b WHERE a.classid = b.classid);

2、LEFT JOIN

用左(右)连接来求差集,由于需要实施两表连接会导致笛卡尔效应其输出集的记录行可能会增多,

若果不是一对一或一对多,我们应该将多对多的情况处理成多对一后才进行连接,否则输出的记录集可能不正确

SELECT
	a.* 
FROM
	student a
	LEFT JOIN classinfo b ON a.classid = b.classid 
WHERE
	b.classid IS NULL;

 求差集的两种方法,有索引可利用时,not exists的效率要高于left join,反之left join效率更

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值