zoukankan      html  css  js  c++  java
  • SQL的组合查询

      在SQL中除了联结查询外,还有一种组合查询;组合查询是指将多条SELECT语句的结果作为一个查询结果集返回,这种查询方式通常称作为并(union)或复合查询(compound query)。

      1、组合查询的使用

      利用UNION操作符将数条SQL查询组合成一个结果集。

      2、组合查询的场景

    • 在一个查询中从不同表返回结构数据
    • 对一个表执行多个查询,按一个查询返回数据

      3、UNION的限制

      使用UNION组合SELECT语句的数目,SQL没有标准限制。但是,有些DBMS可能会对UNION能组合的最大语句数据有限制。

      4、UNION的规则

    • UNION必须由至少两条SELECT语句组成,语句之间用关键字UNION分隔。
    • UNION中的每个查询必须包含相同的列、表达式或聚集函数,不过各个列的次序可以不相同。
    • 列数据类型必须兼容,类型不必完全相同,但必须是DBMS可以隐含转换的类型。
    • 使用UNION组合查询时,只能使用一条ORDER BY子句,并且它必须位于最后一条SELECT语句之后,不过ORDER BY子句是对所有SELECT语句返回的所有结果进行排序。
    • UNION在需要组合多个表的数据时也很有用,即使是有不匹配列名的表,此时可以将UNION与别名组合,这样可以让每个SELECT语句返回相同的列名,检索一个结果集。

      5、UNION包含或取消重复的行

    • UNION从查询结果集中自动去除了重复的行,它的行为与一条SELECT语句中使用多个WHERE子句条件一样;使用UNION时,默认会将重复的行自动取消。
    • 若想改变UNION的默认行为,那么可以使用UNION ALL来返回所有的匹配行;也就是说,使用UNION ALL时,DBMS不取消重复的行。

      6、UNION与WHERE的差异

    • 理论上讲,从性能上看使用多条WHERE子句条件还是UNION应该没有实际的差别。不过,实践中可能会有些差异,最好是测试一下这两种方法,然后取其最优者。
    • 任何具有多个WHERE子句的SELECT语句都可以作为一个组合查询,即UNION几乎总是完成与多个WHERE条件相同的工作。
    • UNION ALL完成了WHERE子句完成不了的工作,也就是说若想要将每个条件的匹配行全部输出(包括重复的行),那么就必须使用UNION ALL,而不是WHERE。
    • 使用UNION可极大简化复杂的WHERE子句,简化从多个表中检索数据的工作。

      7、其他类型的UNION

    • EXCEPT:也称为MINUS,用来检索只在第一个表中存在而在第二个表中不存在的行。
    • INTERSECT:用来检索两个表中都存在的行。

      小结:实际上,这些UNION很少使用,因为相同的结果集可以利用联结得到。 

  • 相关阅读:
    HDU 2795
    HDU 1394
    HDU 1754
    HDU 1166
    SDOI 2006
    HDU 1423
    HDU 1561
    centos7.4 搭建zabbix-server 3.4.5
    vim 简单笔记
    jdk环境并配置环境变量
  • 原文地址:https://www.cnblogs.com/bien94/p/12873335.html
Copyright © 2011-2022 走看看