SQL---DML---UNION的用法

SQL允许执行多个查询,并将结果作为单个查询结果集返回,这些组合查询通常成为并(UNION)。

有两种基本情况,其中需要使用组合查询:

  1. 在单个查询中从不同的表类似返回结构数据
  2. 对单个表执行多个查询,按单个查询返回数据
多数情况下,组合相同表的两个查询完成的工作与具有多个WHERE子句条件查询完成的工作相同。换句话说, 任何具有多个WHERE子句的SELECT语句都可以作为一个组合查询给出。

上例子:

需要位于Illinois,Indiana,Michigan的所有客户的一个报表,而且还想包括所有Fun4All单位而不管位于哪个州。

SELECT cust_name,cust_contact,cust_email
FROM Customers
WHERE cust_state IN('IL','IN','MI')
UNION
SELECT cust_name,cust_contact,cust_email
FROM Customers
WHERE cust_name = 'Fun4All';

在这个简单的例子里,使用UNION可能比使用WHERE更加复杂,但是如果在复杂的条件中或者从多个表中检索数据的情形,可能使用UNION会更简单。

使用UNION的几条规则:

  • UNION必须由两条或者两条以上的SELECT语句组成,语句之间用关键字UNION分隔。
  • UNION中的每个查询必须包含相同的列,表达式或聚集函数。
  • 列数据必须兼容。
包含或者取消重复的行:UNION和UNION ALL

UNION会从查询结果中自动去除重复的行,如果想返回所有的行,则使用UNION ALL而不是UNION。

对组合查询结果排序:

在用UNION组合查询时,只能使用一条ORDER BY语句,她必须出现在最后一条SELECT语句之后,对于结果集,不存在用一种方式排序一部分,而又用另一种方式排序另一部分的情况,因此不允许使用多条ORDER BY语句。

例:

SELECT cust_name,cust_contact,cust_email
FROM Customers
WHERE cust_state IN('IL','IN','MI')
UNION
SELECT cust_name,cust_contact,cuts_email
FROM Customers
WHERE cust_name = 'Fun4All'
ORDER BY cust_name,cust_contact;


你可能感兴趣的:(sql,工作,报表,fun)