mysql 並集、交集、差集


創建兩個表

 
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_a
 
UNION ALL
 
SELECT oname,odesc FROM object_b

結果如下

查詢並集(union)

SELECT oname,odesc FROM object_a
 
UNION
 
SELECT 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
 
INTERSECT
 
SELECT 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM