Oracle 取兩個表中數據的交集
關鍵字: Oracle 取兩個表中數據的交集 INTERSECT
Oracle 作為一個大型的關系數據庫,日常應用中往往需要提取兩個表的交集數據
例如現有如下表,要求找出工資2500(不含2500)以上並且是男性(M)的員工編號,那么就要利用這兩個表的關系做一個交集了
CODE |
NAME |
GENDER |
001 | Tom | M |
002 | Jerry | M |
003 | Ana | F |
CODE |
SALARY |
001 | 2800 |
002 | 2500 |
003 | 3000 |
方法1:利用操作符INTERSECT
INTERSECT 操作符用來合並兩個查詢,返回兩個查詢中都存在的記錄,即返回兩個查詢結果的交集,前提是兩個查詢的列的數量和數據類型必須完全相同。
SELECT CODE FROM EMPLOYEE WHERE GENDER = 'M'
INTERSECT
SELECT CODE FROM SALARY WHERE SALARY > 2500
第一條SQL的結果為
CODE
----------
001
002
第二條SQL的結果為
CODE
----------
001
003
INTERSECT的結果
CODE
----------
001
方法2:利用關系SQL
SELECT A.CODE FROM EMPLOYEE A, SALARY B
WHERE A.CODE = B.CODE AND A.GENDER = 'M' AND B.SALARY > 2500
結果為
CODE
----------
001
以上兩種方法是本人比較常用的方法,尤其第二種,充分體現關系數據的精髓所在。但如果兩個表結構比較復雜,而且關系條件也比較難實現的話,第一種顯然能夠簡單地得到需要的結果,也不失為一種好方法。
差異集合: minus
並集,並排除重復記錄:union
並集,並包含重復記錄:union all
轉自:http://blog.sina.com.cn/s/blog_5656bf3e010007cz.html