本節將學習如何使用集合運算符(包括:`union`,`intersect`和`except`)來組合輸入查詢中的多個結果集

這幾個集合操作符的詳細說明和用法,可通過以下鏈接學習:
>[danger] ## UNION - 將兩個或多個查詢的結果集合并到一個結果集中。
## SQL Server UNION簡介
SQL Server `UNION`是一組集合操作,用于將兩個SELECT語句的結果組合到一個結果集中,該結果集包括屬于`union`中`SELECT`語句的所有行。
以下是SQL Server `UNION`的語法:
~~~sql
query_1
UNION
query_2
~~~
以下是上述語法中的查詢要求:
* 兩個查詢中列的數量和順序必須相同。
* 相應列的數據類型必須相同或兼容。
下面圖中說明了`T1`表的結果集如何與`T2`表的結果集聯合:

**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`之間的主要區別:

## SQL Server UNION示例
請參閱[示例數據庫](https://www.yiibai.com/sqlserver/sql-server-sample-database.html "示例數據庫")中的`staff`和`customers`表,它們的結構和關系如下所示:

#### 1\. UNION和UNION ALL示例
以下示例將員工和客戶的名稱合并到一個列表中:
~~~sql
SELECT
first_name,
last_name
FROM
sales.staffs
UNION
SELECT
first_name,
last_name
FROM
sales.customers;
~~~
執行上面查詢語句,得到以下結果:

如上圖中,它返回了`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;
~~~
執行上面查詢語句,得到以下結果:

查詢按預期返回`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;
~~~
執行上面查詢語句,得到以下結果:

- 第一章-測試理論
- 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 兼容性測試