Oracle 集合操作符

来源:互联网 发布:java paxos算法 编辑:程序博客网 时间:2024/06/05 05:20

-- Start

Oracle 支持如下几个集合操作符。

UNION        用来求两个集合的并集,并去掉重复值UNION ALL    用来求两个集合的并集INTERSECT    用来求两个集合的交集,并去掉重复值MINUS        用来求在第一个集合中存在,而在第二个集合中不存在的记录,并去掉重复值

下面我们先来准备测试数据。

CREATE TABLE TEST_LEFT(    COL CHAR);INSERT INTO TEST_LEFT VALUES ('A');INSERT INTO TEST_LEFT VALUES ('A');INSERT INTO TEST_LEFT VALUES ('B');INSERT INTO TEST_LEFT VALUES ('B');INSERT INTO TEST_LEFT VALUES ('C');CREATE TABLE TEST_RIGHT(    COL CHAR);INSERT INTO TEST_RIGHT VALUES ('A');INSERT INTO TEST_RIGHT VALUES ('B');INSERT INTO TEST_RIGHT VALUES ('B');INSERT INTO TEST_RIGHT VALUES ('D');INSERT INTO TEST_RIGHT VALUES ('E');

下面我们通过一个例子来对比一下它们直接的不同。

---UNIONSELECT * FROM TEST_LEFTUNIONSELECT * FROM TEST_RIGHT;---结果ABCDE---UNION ALLSELECT * FROM TEST_LEFTUNION ALLSELECT * FROM TEST_RIGHT;---结果AABBCABBDE---INTERSECTSELECT * FROM TEST_LEFTINTERSECTSELECT * FROM TEST_RIGHT;---结果AB---MINUSSELECT * FROM TEST_LEFTMINUSSELECT * FROM TEST_RIGHT;---结果C

大家对比一下它们之间的结果就可以看出它们之间的区别,不过有个问题需要注意:

UNION 和 INTERSECT 两别集合可以互换的,但是 MINUS 互换将有不同的结果,如下:

---语句1SELECT * FROM TEST_LEFTMINUSSELECT * FROM TEST_RIGHT;---结果C---语句2SELECT * FROM TEST_RIGHTMINUSSELECT * FROM TEST_LEFT;---结果DE

-- 更多参见:Oracle SQL 精萃

-- 声明:转载请注明出处

-- Last Edited on 2014-12-17

-- Created by ShangBo on 2014-12-17

-- End


0 0