1. 程式人生 > >Oracle中的集合操作符

Oracle中的集合操作符

-- Start

Oracle 支援如下幾個集合操作符。

[sql] view plain copy  print?
  1. UNION        用來求兩個集合的並集,並去掉重複值  
  2. UNIONALL    用來求兩個集合的並集  
  3. INTERSECT    用來求兩個集合的交集,並去掉重複值  
  4. MINUS        用來求在第一個集合中存在,而在第二個集合中不存在的記錄,並去掉重複值  

下面我們先來準備測試資料。

[sql] view plain copy  print?
  1. CREATETABLE TEST_LEFT  
  2. (  
  3.     COL CHAR
  4. );  
  5. INSERTINTO TEST_LEFT VALUES ('A');  
  6. INSERTINTO TEST_LEFT VALUES ('A');  
  7. INSERTINTO TEST_LEFT VALUES ('B');  
  8. INSERTINTO TEST_LEFT VALUES ('B');  
  9. INSERTINTO TEST_LEFT VALUES ('C');  
  10. CREATETABLE TEST_RIGHT  
  11. (  
  12.     COL CHAR
  13. );  
  14. INSERTINTO TEST_RIGHT VALUES ('A');  
  15. INSERTINTO TEST_RIGHT VALUES
     ('B');  
  16. INSERTINTO TEST_RIGHT VALUES ('B');  
  17. INSERTINTO TEST_RIGHT VALUES ('D');  
  18. INSERTINTO TEST_RIGHT VALUES ('E');  

下面我們通過一個例子來對比一下它們直接的不同。
[sql] view plain copy  print?
  1. ---UNION
  2. SELECT * FROM TEST_LEFT  
  3. UNION
  4. SELECT * FROM TEST_RIGHT;  
  5. ---結果
  6. A  
  7. B  
  8. C  
  9. D  
  10. E  
  11. ---UNION ALL
  12. SELECT
     * FROM TEST_LEFT  
  13. UNIONALL
  14. SELECT * FROM TEST_RIGHT;  
  15. ---結果
  16. A  
  17. A  
  18. B  
  19. B  
  20. C  
  21. A  
  22. B  
  23. B  
  24. D  
  25. E  
  26. ---INTERSECT
  27. SELECT * FROM TEST_LEFT  
  28. INTERSECT
  29. SELECT * FROM TEST_RIGHT;  
  30. ---結果
  31. A  
  32. B  
  33. ---MINUS
  34. SELECT * FROM TEST_LEFT  
  35. MINUS  
  36. SELECT * FROM TEST_RIGHT;  
  37. ---結果
  38. C  

大家對比一下它們之間的結果就可以看出它們之間的區別,不過有個問題需要注意:

UNION 和 INTERSECT 兩別集合可以互換的,但是 MINUS 互換將有不同的結果,如下:

[sql] view plain copy  print?
  1. ---語句1
  2. SELECT * FROM TEST_LEFT  
  3. MINUS  
  4. SELECT * FROM TEST_RIGHT;  
  5. ---結果
  6. C  
  7. ---語句2
  8. SELECT * FROM TEST_RIGHT  
  9. MINUS  
  10. SELECT * FROM TEST_LEFT;  
  11. ---結果
  12. D  
  13. E  

-- 宣告:轉載請註明出處

-- Last Edited on 2014-12-17

-- Created by ShangBo on 2014-12-17

-- End