SQL高级查询--集合操作符

集合操作符可以将两个或多个查询返回的行组合起来,以下表给出了4种集合操作符


                                            集合操作符
--------------------------------------------------------------------------------------------------------------------------------------------
操作符                |                                                                 说明
---------------------------------------------------------------------------------------------------------------------------------------------
union   all           |   返回各个查询检索出的所有行,包括重复的行
--------------------------------------------------------------------------------------------------------------------------------------------
union                 |    返回各个查询检索出的所有行,不包括重复的行
-------------------------------------------------------------------------------------------------------------------------------------------
intersect            |   返回两个查询检索出的共有行
---------------------------------------------------------------------------------------------------------------------------------------------
minus              |     返回将第二个查询检索出的行从第一个查询检索出的行中减去之后剩余的行
-------------------------------------------------------------------------------------------------------------------------------------------


当使用集合操作符的时候,必须牢记这样一个限制条件,所有查询返回的列数以及列的类型必须匹配,但列名可以不同。


接下来用示例展示各集合操作符的功能


1. 示例表

products和more_products表创建语句如下:
create table products (
 product_id integer
   constraint products_pk  PRIMARY KEY,
 product_type_id integer
    constraint products_fk_product_types
    references product_types(product_type_id),
name varchar2(30) not null,
description varchar2(50),
price number(5,2)
);
create table more_products (
 prd_id integer
   constraint more_products_pk  PRIMARY KEY,
 prd_type_id integer
    constraint more_products_fk_product_types
    references product_types(product_type_id),
name varchar2(30) not null,
available char(1)
);
下面这个查询从products表中检索product_id,product_type_id和name列
select  product_id,product_type_id,name
from products;
product_id  product_type_id     name
--------------  ----------------------    ------------------------------------------------------------
                1                             1    Modern Science
                2                            1    Chemistry
                3                             2     Supernova
                4                             2   Tank War
               5                              2    Z Files
               6                               2   2412: The Return
               7                              3    Space  Force 9
              8                               3     From Another Planet
               9                              4     Classical Music
              10                             4   Pop 3
               11                           4     Creative  Yell
              12                                     My Front Line


下面这个查询从more_products表中检索prd_id,prd_type_id和name列
select prd_id,prd_type_id,name
from  more _products;
prd_id        prd_type_id          name
----------    -------------------        ---------------------------------------------------------
          1                            1         Modern Science
          2                            1         Chemistry
          3                                        Supernova
          4                             2        Lunar Landing
          5                             2        Submarine

 


2,  使用union all操作符


union all操作符返回查询检索出的所有行,包括重复的行,下面这个查询使用了union all ,注意products和more_products中的所有行都被检索出来了,包括重复的行。
select  product_id,product_type_id,name
from products
union all
select prd_id,prd_type_id,name
from  more _products;


product_id  product_type_id     name
--------------  ----------------------    ------------------------------------------------------------
                1                             1    Modern Science
                2                            1    Chemistry
                3                             2     Supernova
                4                             2   Tank War
               5                              2    Z Files
               6                               2   2412: The Return
               7                              3    Space  Force 9
              8                               3     From Another Planet
               9                              4     Classical Music
              10                             4   Pop 3
               11                           4     Creative  Yell
              12                                     My Front Line
          1                            1         Modern Science
          2                            1         Chemistry
          3                                        Supernova
          4                             2        Lunar Landing
          5                             2        Submarine


可以使用order by 字句对上面进行排序


 

3. 使用union操作符


union操作符返回查询检索出的所有非重复行。下面例子使用了union,注意重复的Modern Science和Chemistry行未被检索,因此只返回15行
select  product_id,product_type_id,name
from products
union 
select prd_id,prd_type_id,name
from  more _products;
product_id  product_type_id     name
--------------  ----------------------    ------------------------------------------------------------
                1                             1    Modern Science
                2                            1    Chemistry
                3                             2     Supernova          
               3                                        Supernova
                4                             2   Tank War
               4                             2        Lunar Landing
               5                              2    Z Files
              5                             2        Submarine
               6                               2   2412: The Return
               7                              3    Space  Force 9
              8                               3     From Another Planet
               9                              4     Classical Music
              10                             4   Pop 3
               11                           4     Creative  Yell
              12                                     My Front Line



4. 使用intersect操作符


intersect操作符返回两个查询检索出的共有行,下面例子使用了intersect,注意返回了Modern Science和Chemistry行
select  product_id,product_type_id,name
from products
intersect
select prd_id,prd_type_id,name
from  more _products;


product_id  product_type_id     name
--------------  ----------------------    ------------------------------------------------------------
                1                             1    Modern Science
                2                            1    Chemistry


5. 使用minus操作符


minus操作符返回将第二个查询检索出的行从第一个查询检索出的行中减去之后剩余的行,下面例子使用minus。
注意先从products中返回的行中减去从more_products中返回的行,然后再返回剩余的行
select  product_id,product_type_id,name
from products
minus
select prd_id,prd_type_id,name
from  more _products;


product_id  product_type_id     name
--------------  ----------------------    ------------------------------------------------------------
                3                             2     Supernova          
                4                             2   Tank War
               5                              2    Z Files
               6                               2   2412: The Return
               7                              3    Space  Force 9
              8                               3     From Another Planet
               9                              4     Classical Music
              10                             4   Pop 3
               11                           4     Creative  Yell
              12                                     My Front Line

 

<待续……

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值