Oracle中的集合操作符
阿新 • • 發佈:2019-02-11
-- Start
Oracle 支援如下幾個集合操作符。
[sql] view plain copy print?- UNION 用來求兩個集合的並集,並去掉重複值
- UNIONALL 用來求兩個集合的並集
- INTERSECT 用來求兩個集合的交集,並去掉重複值
- MINUS 用來求在第一個集合中存在,而在第二個集合中不存在的記錄,並去掉重複值
下面我們先來準備測試資料。
[sql] view plain copy print?- CREATETABLE TEST_LEFT
- (
-
COL CHAR
- );
- INSERTINTO TEST_LEFT VALUES ('A');
- INSERTINTO TEST_LEFT VALUES ('A');
- INSERTINTO TEST_LEFT VALUES ('B');
- INSERTINTO TEST_LEFT VALUES ('B');
- INSERTINTO TEST_LEFT VALUES ('C');
- CREATETABLE TEST_RIGHT
- (
- COL CHAR
- );
- INSERTINTO TEST_RIGHT VALUES ('A');
-
INSERTINTO TEST_RIGHT VALUES
- INSERTINTO TEST_RIGHT VALUES ('B');
- INSERTINTO TEST_RIGHT VALUES ('D');
- INSERTINTO TEST_RIGHT VALUES ('E');
下面我們通過一個例子來對比一下它們直接的不同。
[sql] view plain copy print?
- ---UNION
- SELECT * FROM TEST_LEFT
- UNION
- SELECT * FROM TEST_RIGHT;
- ---結果
- A
- B
- C
- D
- E
- ---UNION ALL
-
SELECT
- UNIONALL
- SELECT * FROM TEST_RIGHT;
- ---結果
- A
- A
- B
- B
- C
- A
- B
- B
- D
- E
- ---INTERSECT
- SELECT * FROM TEST_LEFT
- INTERSECT
- SELECT * FROM TEST_RIGHT;
- ---結果
- A
- B
- ---MINUS
- SELECT * FROM TEST_LEFT
- MINUS
- SELECT * FROM TEST_RIGHT;
- ---結果
- C
大家對比一下它們之間的結果就可以看出它們之間的區別,不過有個問題需要注意:
UNION 和 INTERSECT 兩別集合可以互換的,但是 MINUS 互換將有不同的結果,如下:
- ---語句1
- SELECT * FROM TEST_LEFT
- MINUS
- SELECT * FROM TEST_RIGHT;
- ---結果
- C
- ---語句2
- SELECT * FROM TEST_RIGHT
- MINUS
- SELECT * FROM TEST_LEFT;
- ---結果
- D
- E
-- 宣告:轉載請註明出處
-- Last Edited on 2014-12-17
-- Created by ShangBo on 2014-12-17
-- End