SQL允许执行多个查询,并将结果作为单个查询结果集返回,这些组合查询通常成为并(UNION)。
有两种基本情况,其中需要使用组合查询:
- 在单个查询中从不同的表类似返回结构数据
- 对单个表执行多个查询,按单个查询返回数据
上例子:
需要位于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组合查询时,只能使用一条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;