前言:一般在MySQL中,我们可以通过in和not in来间接实现交集和差集,当然也有一定局限性,面对少量数据还可以,但数据量大了效率就会变得很低。
MySQL交集和差集的实现方法有哪些,怎么样实现MySQL交集和差集,有没有什么快捷的技巧呢?
在MySQL中,只支持Union(并集)集合运算,而对于交集Intersect和差集Except并不支持。那么如何才能在MySQL中实现交集和差集呢?
一般在MySQL中,我们可以通过in和not in来间接实现交集和差集,当然也有一定局限性,面对少量数据还可以,但数据量大了效率就会变得很低。
创建table1
/*DDL 信息*/------------ CREATE TABLE `t1` ( `id` int(11) NOT NULL, `name` varchar(20) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
创建table2
/*DDL 信息*/------------ CREATE TABLE `t2` ( `id` int(11) NOT NULL, `name` varchar(20) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
插入
INSERT INTO t1 VALUES(1,'小王',10); INSERT INTO t1 VALUES(2,'小宋',20); INSERT INTO t1 VALUES(3,'小白',30); INSERT INTO t1 VALUES(4,'hello',40); INSERT INTO t2 VALUES(1,'小王',10); INSERT INTO t2 VALUES(2,'小宋',22); INSERT INTO t2 VALUES(3,'小肖',31); INSERT INTO t2 VALUES(4,'hello',40);
SELECT t1.* FROM t1 id name age 1 小王 10 2 小宋 20 3 小白 30 4 hello 40
SELECT t2.* FROM t2 id name age 1 小王 10 2 小宋 22 3 小肖 31 4 hello 40
使用not in 求差集,但效率低
SELECT t1.* FROM t1
WHERE name NOT IN (SELECT name FROM t2) id name age 3 小白 30
SELECT t1.id, t1.name, t1.age FROM t1 LEFT JOIN t2 ON t1.id = t2.id WHERE t1.name != t2.name OR t1.age != t2.age; id name age 2 小宋 20 3 小白 30
求交集,此时只有id name age 所有都一样才是符合要求的。
SELECT id, NAME, age, COUNT(*)
FROM (SELECT id, NAME, age
FROM t1
UNION ALL
SELECT id, NAME, age
FROM t2
) a
GROUP BY id, NAME, age
HAVING COUNT(*) > 1
id NAME age COUNT(*)
1 小王 10 2
4 hello 40 2
union all和union的区别
UNION和UNION ALL的功能都是将两个结果集合并为一个,但是这两个关键字不管从使用还是效率上来说,都是有一定区别的。
使用上:
1、对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,而Union All则不会去除重复记录。
2、对排序的处理:Union将会按照字段的顺序进行排序;UNION ALL只是将两个结果合并后就返回,并不会进行排序处理。
效率上:
从效率上说,UNION ALL的处理效率要比UNION高很多,所以,如果可以确认合并的两个结果集中,且不包含重复数据和不需要进行排序的话,推荐使用UNION ALL。
文章出自:http://qh.itpxw.cn/peixun/software/201946960.html
文章标题:怎么样实现MySQL交集和差集
免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员
用户级别:10
机构名称:IT培训网
联 系 人:罗老师
联系电话:13783581536
联系手机:13783581536
在线客服:
在 线 QQ:
电子邮件:
网站域名:http://www.itpxw.cn
注册时间:2016-07-18 11:07
最后登录:2024-02-20 13:02
Java定义方法的格式是什么?IT培训网小编来告诉大家。所谓方法...
大家在Java教程中会学到关于Java消息推送的知识,那么,Java消息...
常用的Java日期格式转换有哪些?IT培训网小编来告诉大家。 1...
Java创建对象数组的方法是什么?IT培训网小编来告诉大家。Ja...