zoukankan      html  css  js  c++  java
  • (转)sql union和union all的用法及效率

    1 熟悉union的相关操作

    UNION指令的目的是将两个SQL语句的结果合并起来。从这个角度来看, 我们会产生这样的感觉,UNION跟JOIN似乎有些许类似,因为这两个指令都可以由多个表格中撷取资料。

    UNION的一个限制是两个SQL语句所产生的栏位需要是同样的资料种类。

    另外,当我们用 UNION这个指令时,我们只会看到不同的资料值 (类似 SELECT DISTINCT)。 UNION只是将两个结果联结起来一起显示,并不是联结两个表。

    ps:

    • union的两个表必须拥有相同的列数(比如都是2个字段)
    • union会将两个表中的重复项过滤掉
    • union all可以合并两个表中重复的项

    UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

    请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

    假设我们有以下的两个表格: 

      Store_Information 表: store_name      Sales      Date 
                             Los Angeles     $1500      Jan-05-1999 
                             San Diego       $250       Jan-07-1999 
                             Los Angeles     $300       Jan-08-1999 
                             Boston          $700       Jan-08-1999 


      Internet Sales 表:    Date            Sales 
                   Jan-07-1999     $250 
                     Jan-10-1999     $535 
                   Jan-11-1999     $320 
                   Jan-12-1999     $750 

    如果我们要找出来所有有营业额 (sales) 的日子。要达到这个目的,我们用以下的 SQL 语句: 
    SELECT Date FROM Store_Information 
    UNION 
    SELECT Date FROM Internet_Sales 

    结果: 
      Date 
      Jan-05-1999 
      Jan-07-1999 
      Jan-08-1999 
      Jan-10-1999 
      Jan-11-1999 
      Jan-12-1999 

    UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。

     

    UNION ALL 这个指令的目的也是要将两个 SQL 语句的结果合并在一起。 UNION ALL 和 UNION 不同之处在于 UNION ALL 会将每一笔符合条件的资料都列出来,无论资料值有无重复。

    如果上述的例子我们只用UNION ALL的话,则结果会是:

        Date 
      Jan-05-1999 
      Jan-07-1999 
      Jan-08-1999 
      Jan-08-1999 
      Jan-07-1999 
      Jan-10-1999 
      Jan-11-1999 
      Jan-12-1999 

    UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。

     

    从效率上说,sql union all的执行效率要比sql union效率要高很多,这是因为,使用sql union需要进行排重,而sql union All 是不需要排重的,这一点非常重要,因为对于一些单纯地使用分表来提高效率的查询,完全可以使用sql union All。

  • 相关阅读:
    (二)常问升级小点
    (一)常问基础小点
    Linux之expr命令详解
    Mac--Visual Studio Code 常用快捷键
    git撤销commit操作回到add状态
    ExampleMatcher ,在查询非int 或boolean 字段时要使用 withIgnorePaths() 忽略 int 和boolean 字段,要不然查询不到值
    navicat 用url 连接mongo
    javase 打印杨辉三角
    关系型数据库遵循ACID规则
    Redis介绍
  • 原文地址:https://www.cnblogs.com/lixuwu/p/6538919.html
Copyright © 2011-2022 走看看