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都有效。
  • 相关阅读:
    Mysql存储引擎
    数据库事务的四大特性以及事务的隔离级别
    万万没想到,面试中,连 ClassLoader类加载器 也能问出这么多问题
    万万没想到,JVM内存区域的面试题也可以问的这么难?
    SQL Server读取及导入Excel数据
    SQL Server加密与解密
    线程之间如何通信
    mybatis 批量更新 批量添加
    vue echarts 从后台获取数据形成饼图,柱状图,折线图
    vue 视频播放
  • 原文地址:https://www.cnblogs.com/bluedeblog/p/6653946.html
Copyright © 2011-2022 走看看