1. 大多数SQL查询只从一个或者多表中返回数据都是单个select语句。但是SQL server允许多个select语句执行,它返回的结果是一个结果集,需要使用 union 组合 ,这些组合一般称为并(union)和复合查询(compound query)
  2. 什么情况下可以需要使用组合查询

2.1、在一个查询中从不同的表返回不同的结构数据

2.2、对一个表执行多个查询,按一个查询返回数据

  1. 组合查询和多个where条件

3.1 多数情况下,组合相同表的两个查询所完成的和具有多个where条件的查询是一样的。换个说法,具有多个where条件的查询也可以称之为组合成查询

  1. 使用 union 操作符来组合数条Sql server语句,会将查询的结果返回为结果集

例子:如需要查询Illinois、Indiana和Michigan等美国几个州的所有顾客报表,还想包括不管位于哪个洲的所有Fun4All.

使用union涉及多个select语句,步骤分解:

select cust_name,cust_contact,cust_email
from Customers
where cust_state in ('il','in','mi')

输出:

android sql联合查询语法 sql怎么联合查询_android sql联合查询语法

这条查询把Illinois、Indiana和Michigan这些洲缩写,放在in关键字中,查询以in ('il','in','mi'),这些开头的都会被检索。

步骤二:

select cust_name,cust_contact,cust_email
from Customers
where cust_name = 'fun4all'

输出:

          

android sql联合查询语法 sql怎么联合查询_sql_02

这条查询把cust_name等于fun4all的数据行都检索出来,使用操作符 = 来做相等测试。你会发现有个输出了两次,因为它满足两个select的检索条件。

步骤三:

使用union来组合这两个select

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'

输出:

          

android sql联合查询语法 sql怎么联合查询_android sql联合查询语法_03

这个查询把步骤一和步骤二的组合在一起,使用union关键字来隔开。Union指示DBMS执行这两个select查询,并两个的查询的一个结果集。不会忽略null行,union 关键字还有一个去重复行的功能 ,如果想显示null行,需要在union关键字后面借一个 All,因为union关键字默认行为就是去重复。

Union 关键字与多个where条件的区别:

select cust_name,cust_contact,cust_email
from Customers
where cust_contact in ('il','in','mi') or cust_name = 'fun4all'

输出:

android sql联合查询语法 sql怎么联合查询_android sql联合查询语法_04

这个例子中使用了步骤一和步骤二的where条件,在通过or操作符来把这两条件联结在一起。Or操作符:两个条件满足一个或者两个都的数据都可以被检索出来。

可能你觉得使用union关键字来组合很麻烦。但是,对于较与复杂where条件,或者从多个表中查询数据,使用union关键字比多个where条件,要简单一些。

  1. union关键字的限制:union关键字组合的select数目,Sql server 没有明确的确定。可以同DBMS文档来查看,union关键字都最大限制数目。
  2. Union 关键字使用规则:

6.1、union关键字必须使用在两个或者两个以上的表查询数据,使用Union关键字来隔开

6.2、Union关键字的每个查询必须包含相同的列,表达式以及聚合函数,不然则会报错

6..3列的数据类型必须兼容:类型不必相同,但是,必需是DBMS能隐式转的类型也可以。

   

  1. union all为union的一种形式,他可以完成where无法完成的工作。
  2. 在使用union进行组合查询是,无论有多少个select子句。只能出现一个order by子句,而order by子句必须位于最后一行。

如:

select prod_id,quantity
from OrderItems
where prod_id like 'bnbg%' and quantity >=100
union
select prod_id,quantity
from OrderItems
where quantity >=100
order by prod_id,quantity

错误形式:(红色的是错误地方)

select prod_id,quantity
from OrderItems
where prod_id like 'bnbg%'  and quantity >=100
order by prod_id,quantity
union
select prod_id,quantity
from OrderItems
where quantity >=100
order by prod_id,quantity