zoukankan      html  css  js  c++  java
  • Union、Union All、Intersect、Minus

    转自:http://www.2cto.com/database/201208/148795.html

    Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

    Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
    Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
    Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。
      www.2cto.com  
    具体讲讲Union和Union All。先来看一个例子:
     
    有一张学生表student如下:
    id name score
    1 Aaron 78
    2 Bill 76
    3 Cindy 89
    4 Damon 90
    5 Ella 73
    6 Frado 61
    7 Gill 99
    8 Hellen 56
    9 Ivan 93
    10 Jay 90
     
    看看以下4段SQL语句
    [sql] 
    1)  
    select * from student where id<4  
    union  
    select * from student where 2<id and id<6  
      
    2)  
    select * from student where 2<id and id<6  
    union  
    select * from student where id<4  
        www.2cto.com  
    3)  
    select * from student where id<4  
    union all  
    select * from student where 2<id and id<6  
      
    4)  
    select * from student where 2<id and id<6  
    union all  
    select * from student where id<4  
     
    看看4段SQL语句的执行结果:
    id name score
    1 Aaron 78
    2 Bill 76
    3 Cindy 89
    4 Damon 90
    5 Ella 73
    同上
      www.2cto.com  
    id name score
    1 Aaron 78
    2 Bill 76
    3 Cindy 89
    3 Cindy 89
    4 Damon 90
    5 Ella 73
    id name score
    3 Cindy 89
    4 Damon 90
    5 Ella 73
    1 Aaron 78
    2 Bill 76
    3 Cindy 89
    从以上四个结果来看,可以得出结论:Union是不可重复的,有序的。Union All是可以重复的,无序的。
     
    那么Union的自动排序的默认规则是什么呢?
    众多周知,以上的select *就相当于select id, name, score。默认排序规则是按照select之后的第一个字段排序,也就是id。如果想要按照score排序,可以这样写:select score, id, name。
    那么可不可以用order by排序呢,答案是:可以。不过order by一定要写到最后一个结果集里,如下面SQL语句:
     
    [sql] 
    select * from student where 2<id and id<6  
    union    www.2cto.com  
    select * from student where id<4  
    order by score  
    order by 排序对于Union、Union All、Intersect、Minus都有效。
  • 相关阅读:
    HDU 1285 确定比赛名次(拓扑排序模板)
    POJ 1679 The Unique MST(次小生成树)
    POJ 3026 Borg Maze(Prim+bfs求各点间距离)
    POJ 2349 Arctic Network(最小生成树+求第k大边)
    POJ 3169 Layout (spfa+差分约束)
    给定两个list A ,B,请用找出 A ,B中相同的元素,A ,B中不同的元素 ??
    什么是http协议??
    Python2中range 和xrange的区别??
    死锁 ??
    调度算法 ??
  • 原文地址:https://www.cnblogs.com/bluedeblog/p/6653946.html
Copyright © 2011-2022 走看看