-- 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