MySQL 并集、交集、差集

来源:互联网 发布:哪里有淘宝小号买 编辑:程序博客网 时间:2024/06/07 00:04

创建两个表

CREATE TABLE `object_a` (  `id` bigint(20) NOT NULL AUTO_INCREMENT,  `oname` varchar(50) DEFAULT NULL,  `odesc` varchar(50) DEFAULT NULL,  `create_time` datetime DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
添加数据


CREATE TABLE `object_b` (  `id` bigint(20) NOT NULL AUTO_INCREMENT,  `oname` varchar(50) DEFAULT NULL,  `odesc` varchar(50) DEFAULT NULL,  `create_time` datetime DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
添加数据

查询并集(union all)

SELECT oname,odesc FROM object_aUNION ALLSELECT oname,odesc FROM object_b

结果如下


查询并集(union)

SELECT oname,odesc FROM object_aUNIONSELECT oname,odesc FROM object_b

结果如下



PS:union自带去重

查询交集

SELECT a.oname,a.odesc FROM object_a a INNER JOIN object_b b ON a.oname=b.oname AND a.odesc=b.odesc

等价于

SELECT a.oname,a.odesc FROM object_a a INNER JOIN object_b b USING(oname,odesc)

结果如下



PS:别的数据库可以试试这种写法

SELECT oname,odesc FROM object_a INTERSECTSELECT oname,odesc FROM object_b 


查询差集

SELECT a.oname, a.odesc FROM  object_a a   LEFT JOIN object_b b     ON a.oname = b.oname     AND a.odesc = b.odesc WHERE b.id IS NULL 

结果如下


PS:别的数据库可以试试这种写法

SELECT a.oname, a.odesc FROM object_a a MINUS SELECT b.oname, b.odesc FROM object_b b 





原创粉丝点击