本文共 1243 字,大约阅读时间需要 4 分钟。
-- 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
-- 更多参见:
-- 声明:转载请注明出处
-- Last Edited on 2014-12-17
-- Created by ShangBo on 2014-12-17
-- End