oracle集合运算

一、并集UNION/UNION ALL

1、  UNION运算符返回两个集合去掉重复元素后的所有记录。与or运算符达到相同的效果。

              举例:首先利用or查询数据:

              SQL>select empno,ename from emp where ename like '%A%' or ename like '%M%';

 

                 EMPNO ENAME

                     --------------------

                         7369 SMITH

                         7499 ALLEN

                        7521 WARD

                         7654 MARTIN

                         7698 BLAKE

                         7782 CLARK

                         7876 ADAMS

                         7900 JAMES

                         7934 MILLER

 

                            已选择9行。

              然后使用union运算符取得以上面两个恶条件分别查询的的并集,与上面进行对比:

              SQL>select empno,ename from emp where ename like '%A%'

             2 union

             3 select empno,ename from emp where ename like '%M%';

 

            EMPNO ENAME

              --------------------

         7369 SMITH

           7499ALLEN

         7521 WARD

         7654 MARTIN

         7698 BLAKE

         7782 CLARK

         7876 ADAMS

         7900 JAMES

         7934 MILLER

 

              已选择9行。

 2、UNION ALL 返回两个集合的所有记录,包括重复的,也就是说利用这个运算符会将先后查到的所有的记录都输出,包括重复的部分。

  SQL>select empno,ename from emp where ename like '%A%'

 2  union all

 3  select empno,ename from empwhere ename like '%M%';

 

    EMPNO ENAME

       --------------------

     7499 ALLEN

     7521 WARD

     7654 MARTIN

     7698 BLAKE

     7782 CLARK

     7876 ADAMS

     7900 JAMES

     7369 SMITH

     7654 MARTIN

      7876 ADAMS

     7900 JAMES

 

    EMPNO ENAME

---------- ----------

     7934 MILLER

 

       已选择12行。

二、交集INTERSECT (运算符返回同时属于两个集合的记录)

举例说明:

先分别以两个条件查出相应的数据:

1、查询出emp表中薪资sal在700到1300之间的数据:

       SQL>select ename,sal from emp where sal between 700 and 1300

 

       ENAME        SAL

       ---------------

       SMITH        800

       WARD        1250

       MARTIN      1250

       ADAMS       1100

       JAMES        950

       MILLER      1300

 

       已选择6行。

2、  查询出emp表中薪资sal在1200 到1400之间的数据:

              SQL>select ename,sal from emp where sal between 1200 and 1400;

 

              ENAME        SAL

              ---------------

              WARD        1250

              MARTIN      1250

              MILLER      1300

然后利用INTERSECT查询交集,与上面的进行比较:

       SQL>select ename,sal from emp where sal between 1200 and 1400

      2 intersect

      3 select ename,sal from emp where sal between 700 and 1300;

 

       ENAME        SAL

       ---------------

       MARTIN      1250

       MILLER      1300

       WARD        1250

三、差集MINUS

       差值返回属于第一个集合但不属于第二个集合的记录。同样以上个查询为例,利用MINUS可以得到薪资在700到1200之间的数据。

       SQL>select ename,sal from emp where sal between 700 and 1300

      2 minus

    3  select ename,sal from emp where sal between1200 and 1400;

 

       ENAME        SAL

       ---------------

       ADAMS       1100

       JAMES        950

       SMITH        800

四、集合运算的注意事项:

       1、查询语句中前后的select语句的查询参数的类型名称个数都要一致否则会报错。

       例如:

              SQL>  select ename,sal from emp where sal between1200 and 1400

             2  union

             3 select comm,ename from emp where sal between 799 and 1200;

             select ename,sal from emp where salbetween 1200 and 1400

       *

              第 1 行出现错误:

              ORA-01790:表达式必须具有与对应表达式相同的数据类型

3、  可以使用括号改变集合执行的顺序

       3、集合采用第一个语句的表头作为表头

       4、如果有order by子句,只能出现在最后一个select语句之后,第一个select语句接受的列名称或者别名roder by**(查询结果的列名)必须与第一个select语句的列名一致

 

       SQL>select ename,sal from emp where sal between 700 and 1300

       2  union

       3 select ename,sal from emp where sal between 1200 and 1400;

 

       ENAME        SAL

              ---------------

       ADAMS       1100

       JAMES        950

       MARTIN      1250

       MILLER      1300

       SMITH        800

       WARD        1250

 

              已选择6行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值