oracle中的MINUS运算符

时间:2013-11-26 05:33:12

标签: sql oracle oracle10g

MINUS运营商

我有2张表A和B.

SELECT COUNT(*) FROM (SELECT * FROM tableA)

返回389

SELECT COUNT(*) FROM (SELECT * FROM tableB)

返回217

SELECT COUNT(*) FROM
(SELECT * FROM tableA
INTERSECT
SELECT * FROM tableB)

返回0

SELECT COUNT(*) FROM 
(SELECT * FROM tableA
MINUS
SELECT * FROM tableB)

返回389

SELECT COUNT(*) FROM 
(SELECT * FROM tableB
MINUS
SELECT * FROM tableA)

重新调整89

有人可以解释为什么最后一个查询返回89而不是217?

2 个答案:

答案 0 :(得分:19)

MINUS获取第一个结果集,并删除第二个结果集中存在的任何结果集; 它还会删除所有重复项

在您的示例中,tableA有389行,tableB有217行;你的INTERSECT显示没有共同的行,这意味着tableA MINUS tableB是389行(即所有行)。

tableB MINUS tableA返回tableB中不同的行集,因此tableB中有89个不同的值。

答案 1 :(得分:10)

假设您已设置A和B, A = {1,2,3,4}和count(A)= 4, B = {5,6,6,7,7}且计数(B)= 5

A-B = {1,2,3,4}因此计数(A-B)=计数(A)= 4

但是B-A = {5,6,7}并且计数(B)= 3

因此,我们在此理解的是,减去了重复的术语(或行)。这就是行数从217减少到89的原因。

希望这有帮助。

相关问题