本节将学习如何使用集合运算符(包括:`union`,`intersect`和`except`)来组合输入查询中的多个结果集
![](https://img.kancloud.cn/87/45/8745c64a2c5e7014e1ff9858c84fbae4_841x441.png)
这几个集合操作符的详细说明和用法,可通过以下链接学习:
>[danger] ## UNION - 将两个或多个查询的结果集合并到一个结果集中。
## SQL Server UNION简介
SQL Server `UNION`是一组集合操作,用于将两个SELECT语句的结果组合到一个结果集中,该结果集包括属于`union`中`SELECT`语句的所有行。
以下是SQL Server `UNION`的语法:
~~~sql
query_1
UNION
query_2
~~~
以下是上述语法中的查询要求:
* 两个查询中列的数量和顺序必须相同。
* 相应列的数据类型必须相同或兼容。
下面图中说明了`T1`表的结果集如何与`T2`表的结果集联合:
![联合](https://www.yiibai.com/uploads/article/2019/02/22/090006_96847.png "联合")
**UNION 与 UNION ALL**
默认情况下,`UNION`运算符从结果集中删除所有重复的行。 但是,如果要保留重复的行,则需要明确指定`ALL`关键字,如下所示:
~~~sql
query_1
UNION ALL
query_2
~~~
换句话说,`UNION`运算符删除重复行,而`UNION ALL`运算符在最终结果集中包含重复行。
**UNION 与 JOIN**
INNER JOIN或LEFT JOIN等连接组合了两个表中的列,而`UNION`组合了两个查询中的行。
换句话说,`join`会水平附加结果集,而`union`会垂直附加结果集。
下图说明了`UNION`和`JOIN`之间的主要区别:
![UNION与JOIN主要区别](https://www.yiibai.com/uploads/article/2019/02/22/090518_14278.png)
## SQL Server UNION示例
请参阅[示例数据库](https://www.yiibai.com/sqlserver/sql-server-sample-database.html "示例数据库")中的`staff`和`customers`表,它们的结构和关系如下所示:
![表结构](https://www.yiibai.com/uploads/article/2019/02/22/090633_23238.png "表结构")
#### 1\. UNION和UNION ALL示例
以下示例将员工和客户的名称合并到一个列表中:
~~~sql
SELECT
first_name,
last_name
FROM
sales.staffs
UNION
SELECT
first_name,
last_name
FROM
sales.customers;
~~~
执行上面查询语句,得到以下结果:
![](https://www.yiibai.com/uploads/article/2019/02/22/090820_49570.png)
如上图中,它返回了`1454`行。
`staffs`表有`10`行,`customers`表有`1445`行,如以下查询说明所示:
~~~sql
SELECT
COUNT (*)
FROM
sales.staffs;
-- 10
SELECT
COUNT (*)
FROM
sales.customers;
-- 1454
~~~
因为`union`的结果集只返回`1454`行,这意味着删除了一个重复行。要包含重复行,请使用`UNION ALL`,如以下查询中所示:
~~~sql
SELECT
first_name,
last_name
FROM
sales.staffs
UNION ALL
SELECT
first_name,
last_name
FROM
sales.customers;
~~~
执行上面查询语句,得到以下结果:
![UNION ALL](https://www.yiibai.com/uploads/article/2019/02/22/091155_34906.png)
查询按预期返回`1455`行。
#### 2\. UNION和ORDER BY示例
要对`UNION`运算符返回的结果集进行排序,请将`ORDER BY`子句放在最后一个查询中,如下所示:
~~~sql
SELECT
select_list
FROM
table_1
UNION
SELECT
select_list
FROM
table_2
ORDER BY
order_list;
~~~
例如,要对客户和员工的名字(`first_name`)和姓氏(`last_name`)进行排序,请使用以下查询语句:
~~~sql
SELECT
first_name,
last_name
FROM
sales.staffs
UNION ALL
SELECT
first_name,
last_name
FROM
sales.customers
ORDER BY
first_name,
last_name;
~~~
执行上面查询语句,得到以下结果:
![排序](https://www.yiibai.com/uploads/article/2019/02/22/091448_65576.png "排序")
- 第一章-测试理论
- 1.1软件测试的概念
- 1.2测试的分类
- 1.3软件测试的流程
- 1.4黑盒测试的方法
- 1.5AxureRP的使用
- 1.6xmind,截图工具的使用
- 1.7测试计划
- 1.8测试用例
- 1.9测试报告
- 2.0 正交表附录
- 第二章-缺陷管理工具
- 2.1缺陷的内容
- 2.2书写规范
- 2.3缺陷的优先级
- 2.4缺陷的生命周期
- 2.5缺陷管理工具简介
- 2.6缺陷管理工具部署及使用
- 2.7软件测试基础面试
- 第三章-数据库
- 3.1 SQL Server简介及安装
- 3.2 SQL Server示例数据库
- 3.3 SQL Server 加载示例
- 3.3 SQL Server 中的数据类型
- 3.4 SQL Server 数据定义语言DDL
- 3.5 SQL Server 修改数据
- 3.6 SQL Server 查询数据
- 3.7 SQL Server 连表
- 3.8 SQL Server 数据分组
- 3.9 SQL Server 子查询
- 3.10.1 SQL Server 集合操作符
- 3.10.2 SQL Server聚合函数
- 3.10.3 SQL Server 日期函数
- 3.10.4 SQL Server 字符串函数
- 第四章-linux
- 第五章-接口测试
- 5.1 postman 接口测试简介
- 5.2 postman 安装
- 5.3 postman 创建请求及发送请求
- 5.4 postman 菜单及设置
- 5.5 postman New菜单功能介绍
- 5.6 postman 常用的断言
- 5.7 请求前脚本
- 5.8 fiddler网络基础及fiddler简介
- 5.9 fiddler原理及使用
- 5.10 fiddler 实例
- 5.11 Ant 介绍
- 5.12 Ant 环境搭建
- 5.13 Jmeter 简介
- 5.14 Jmeter 环境搭建
- 5.15 jmeter 初识
- 5.16 jmeter SOAP/XML-RPC Request
- 5.17 jmeter HTTP请求
- 5.18 jmeter JDBC Request
- 5.19 jmeter元件的作用域与执行顺序
- 5.20 jmeter 定时器
- 5.21 jmeter 断言
- 5.22 jmeter 逻辑控制器
- 5.23 jmeter 常用函数
- 5.24 soapUI概述
- 5.25 SoapUI 断言
- 5.26 soapUI数据源及参数化
- 5.27 SoapUI模拟REST MockService
- 5.28 Jenkins的部署与配置
- 5.29 Jmeter+Ant+Jenkins 搭建
- 5.30 jmeter脚本录制
- 5.31 badboy常见的问题
- 第六章-性能测试
- 6.1 性能测试理论
- 6.2 性能测试及LoadRunner简介
- 第七章-UI自动化
- 第八章-Maven
- 第九章-测试框架
- 第十章-移动测试
- 10.1 移动测试点及测试流程
- 10.2 移动测试分类及特点
- 10.3 ADB命令及Monkey使用
- 10.4 MonkeyRunner使用
- 10.5 appium工作原理及使用
- 10.6 Appium环境搭建(Java版)
- 10.7 Appium常用函数(Java版)
- 10.8 Appium常用函数(Python版)
- 10.9 兼容性测试