邯郸做网站推广的地方,wordpress标签用发,网站免费推广方法,吴中区做网站文章目录 前言实现方式union all和union的区别后言 前言 hello world欢迎来到前端的新世界 #x1f61c;当前文章系列专栏#xff1a;Mysql #x1f431;#x1f453;博主在前端领域还有很多知识和技术需要掌握#xff0c;正在不断努力填补技术短板。(如果出现错误… 文章目录 前言实现方式union all和union的区别后言 前言 hello world欢迎来到前端的新世界 当前文章系列专栏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)
) ENGINEInnoDB DEFAULT CHARSETutf8 创建table2
/*DDL 信息*/------------ CREATE TABLE t2 ( id int(11) NOT NULL, name varchar(20) DEFAULT NULL, age int(11) DEFAULT NULL, PRIMARY KEY (id)
) ENGINEInnoDB DEFAULT CHARSETutf8 插入
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);
查询table1
SELECT t1.* FROM t1 id name age
1 小王 10
2 小宋 20
3 小白 30
4 hello 40 查询table2
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。
后言 创作不易要是本文章对广大读者有那么一点点帮助 不妨三连支持一下您的鼓励就是博主创作的动力