在数据库的数据集操作中经常碰到大量的数据进行集合操作,这里面有几个比较重要的集合操作,对SQL的性能有较大的帮助。下面就是这几个操作语句的介绍。

UNION Statement

Combine data from one or more SELECT statements.
In Oracle 8i (and above) the UNION command has been largely replaced by the new Analytic Features
Syntax:

SELECT command {UNION | UNION ALL | INTERSECT | MINUS} SELECT command

key:

UNION - Combine the unique rows returned by 2 SELECT statements
UNION ALL - Combine the rows returned by 2 SELECT statements (including all duplicates)
INTERSECT - Return only those rows that are in *both* SELECT statements
MINUS - Return the rows that are in the first SELECT but not the second

To combine more than two SELECTs simply nest the expressions
SELECT expr1 UNION (SELECT expr2 UNION SELECT expr3)

 

 

集合操作有 并,交,差 3种运算。 
union :得到两个查询结果的并集,并且自动去掉重复行。不会排序 
union all:得到两个查询结果的并集,不会去掉重复行。也不会排序 
intersect:得到两个查询结果的交集,并且按照结果集的第一个列进行排序 
minus:得到两个查询结果的减集,以第一列进行排序 
例子: 
下面是两个表:一个主修课程表,一个选修课程表。 
这个是主修课程表:minors 
    create table minors( 
         minor_id number primary key, 
         minor_name varchar2(30) not null, 
         credit_hour number(2) 
      ) 
插入3条记录:  
     insert into minors values(10101,'计算机原理',4) 
      insert into minors values(10201,'自动控制原理',3) 
      insert into minors values(10301,'工程制图原理',4) 
下面创建选修课程表minors2 
       create table minors2( 
         minor_id number primary key, 
         minor_name varchar2(30) not null, 
         credit_hour number(2) 
       ) 
插入两条记录: 
        insert into minors2 values(10201,'自动控制原理',3) 
       insert into minors2 values(10301,'工程制图原理',4)  

(1)
两个表使用union all:得到如下结果 
        select minor_id,minor_name,credit_hour from minors union all 
       select minor_id,minor_name,credit_hour from minors2 order by     credit_hour 
结果: 
MINOR_ID MINOR_NAME                     CREDIT_HOUR 
---------- ------------------------------ ----------- 
     10201 自动控制原理                             3 
     10201 自动控制原理                             3 
     10101 计算机原理                               4 
     10301 工程制图原理                             4 
     10301 工程制图原理                             4

(2)
两个表使用union :得到如下结果 
select minor_id,minor_name,credit_hour from minors union 
    select minor_id,minor_name,credit_hour from minors2 order by credit_hour 
结果: 
MINOR_ID MINOR_NAME                     CREDIT_HOUR 
---------- ------------------------------ ----------- 
     10201 自动控制原理                             3 
     10101 计算机原理                               4 
     10301 工程制图原理                             4

(3)
两个表使用intersect :得到如下结果 
     select minor_id,minor_name,credit_hour from minors intersect 
    select minor_id,minor_name,credit_hour from minors2 
结果: 
MINOR_ID MINOR_NAME                     CREDIT_HOUR 
---------- ------------------------------ ----------- 
     10201 自动控制原理                             3 
     10301 工程制图原理                             4

(4)

两个表使用minus :得到如下结果 
    select minor_id,minor_name,credit_hour from minors minus 
    select minor_id,minor_name,credit_hour from minors2 
结果: 
MINOR_ID MINOR_NAME                     CREDIT_HOUR 
---------- ------------------------------ ----------- 
     10101 计算机原理