深入理解Oracle中的集合操作与复合查询

--Oracle中的复合查询
复合查询:包含集合运算(操作)的查询
常见的集合操作有:
union:    两个查询的并集(无重复行、按第一个查询的第一列升序排序)
union all:两个查询的并集(有重复行)
intersect:两个查询的交集(无重复行、按第一个查询的第一列升序排序)
minus:    两个查询的差集(无重复行、按第一个查询的第一列升序排序),取第一张表有而第二张表没有的所有记录

由于union、intersect、minus存在排序,故而对sql性能的影响很大,建议少用。

--测试
create table t1 (id number,name varchar2(20));
create table t2 (id number,name varchar2(20));
insert into t1 values(1,'表1');
insert into t1 values(2,'表1');
insert into t1 values(3,'表1');
insert into t1 values(4,'表1');
insert into t1 values(5,'表1');
insert into t2 values(3,'表2');
insert into t2 values(4,'表2');
insert into t2 values(5,'表2');
insert into t2 values(6,'表2');
insert into t2 values(7,'表2');

--查询t1和t2
SQL> select * from t1;
 
        ID NAME
---------- --------------------
表1
表1
表1
表1
表1

SQL> select * from t2;
 
        ID NAME
---------- --------------------
表2
表2
表2
表2
表2

--并集
--1.union               
select id  from t1
union
select id from t2 ;

SQL> select id  from t1
 union
 select id from t2 ;
 
        ID
----------
        2
        4
        6
 
rows selected

--2.union all
select id  from t1
union all
select id from t2;

SQL> select id  from t1
 union all
 select id from t2;
 
        ID
----------
        2
        4
        3
        5
        7
rows selected

--交集
select id  from t1
intersect
select id from t2;

SQL> select id  from t1
 intersect
 select id from t2;
 
        ID
----------
        4

--差集
select id  from t1
minus
select id from t2;

SQL> select id  from t1
 minus
 select id from t2;
 
        ID
----------
        2

相关推荐