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很少使用,因为相同的结果集可以利用联结得到。 

原文地址:https://www.cnblogs.com/bien94/p/12873335.html