T-SQL 语言基础: 集合运算(Union, Intersect, Except)

目录

  1. 概念介绍
  2. 并集运算 (Union)
    • UNION ALL 示例
    • UNION 示例
  3. 交集运算 (Intersect)
    • INTERSECT 示例
  4. 差集运算 (Except)
    • EXCEPT 示例
  5. 集合运算优先级
  6. 总结
  7. 引用
  8. 数据库脚本下载

概念介绍

在 SQL Server 中,集合运算用于对两个输入查询结果进行操作。集合运算包括并集 (Union)、交集 (Intersect) 和差集 (Except)。这些运算可以处理包含重复记录的多集。集合运算结果中的列名由第一个查询决定,两个查询必须包含相同的列数且相应列的数据类型必须兼容。

复制代码
-- 集合运算时对输入两个集合(更确切的说,应该是多集运算)参与运算的集合可以是由两个输入的查询结果。
	-- 多集不是真正的集合,可以包含重复的记录
-- T-SQL 支持3中集合运算: 并集 UNION,交集 UNION 和差集 EXCEPT,
	-- EXCEPT 和 INTERSECT 运算是 2005 引入的
-- 集合运算会对两个输入查询生成的结果集进行逐行比较,根据比较结果和所使用的集合运算来确定某一行是否应该包含再集合运算的结果中
	-- 集合本身是无序的,所以集合运算设计的两个查询不能包含 ORDER BY 子句
-- 参与集合运算的两个查询结果集必须包含相同的列数,而且相应列必须具有兼容的数据类型
	-- 兼容类型 是指优先级较低的数据类型必须能隐式的转换为高级的数据类型

-- 集合运算结果中的列名由第一个查询决定,如果要为结果列分配列名,应该再第一个查询中分配相应的列名

-- 两个特点: 
	-- 1. 对行进行比较时,集合运算认为两个 NULL 相等
	-- 2. ANSI SQL 对每种集合运算都支持两个选项: DISTINCT 和 ALL
		-- DISTINCT 逻辑上可以从两个输入的多集中消除重复行
		-- ALL 对两个多集进行运算时不会删除重复行
			-- UNION ALL 并集
			-- UNION 隐含 DINSTINCT

并集运算 (Union)

并集运算将两个集合合并,返回所有元素。SQL Server 支持 UNION ALLUNION

UNION ALL 示例

UNION ALL 返回输入多集中出现的所有行,不进行去重。

sql 复制代码
SELECT country, region, city FROM HR.Employees
UNION ALL
SELECT country, region, city FROM Sales.Customers;

输出:101行

UNION 示例

UNION 运算隐含去重逻辑,返回的集合中包含两个输入集合中的所有行,不包含重复记录。

sql 复制代码
SELECT country, region, city FROM HR.Employees
UNION 
SELECT country, region, city FROM Sales.Customers;

输出:71行

交集运算 (Intersect)

交集运算返回两个输入集合中都存在的行。SQL Server 支持 INTERSECT 运算。

复制代码
-- 交集由既属于A,也属于B的所有元素组成的集合
INTERSECT 示例

INTERSECT 运算返回两个输入集合中的共同行。

sql 复制代码
SELECT country, region, city FROM HR.Employees
INTERSECT
SELECT country, region, city FROM Sales.Customers;

输出:

差集运算 (Except)

差集运算返回第一个结果集中存在但不在第二个结果集中的行。SQL Server 支持 EXCEPT 运算。

EXCEPT 示例

EXCEPT 运算返回第一个集合中存在、第二个集合中不存在的行。

sql 复制代码
SELECT country, region, city FROM HR.Employees
EXCEPT
SELECT country, region, city FROM Sales.Customers;

输出:

集合运算优先级

在 SQL Server 中,集合运算的优先级如下:

  1. INTERSECT 运算的优先级高于 UNIONEXCEPT
  2. UNIONEXCEPT 运算的优先级相等。
优先级示例

查询返回未出现在雇员地址和客户地址交集中的供应商地址。

sql 复制代码
SELECT country, region, city FROM Production.Suppliers
EXCEPT 
SELECT country, region, city FROM HR.Employees
INTERSECT
SELECT country, region, city FROM Sales.Customers;

输出:

总结

集合运算在 SQL 查询中非常有用,可以用来合并、比较和筛选两个结果集。了解并集、交集和差集运算的用法以及它们的优先级有助于编写高效的 SQL 查询。

引用

数据库脚本下载

TSQLFundamentals2008


**喜欢的话,请收藏 | 关注(✪ω✪)** ......**万一有趣的事还在后头呢,Fight!!(o^-^)~''☆ミ☆ミ**......

相关推荐
我科绝伦(Huanhuan Zhou)1 天前
Linux 环境下 SQL Server 自动收缩日志作业创建脚本(Shell 版)
linux·运维·数据库·sql server
wstcl13 天前
通过EF Core将Sql server数据表移植到MySql
数据库·mysql·sql server·efcore
ManageEngine卓豪14 天前
SQL Server 审计指南:配置、使用与最佳实践
sql server·日志分析·数据库安全·sql server审计
betazhou16 天前
SQL server2019 配置故障群集文件共享方式always on高可用群集
数据库·sql server·高可用·always on·文件共享见证
betazhou19 天前
SQL server2019无域安装always on高可用集群
sql server·高可用·always on·故障转移群集
daqiaonanlu20001 个月前
SQL server新建用户并赋予某数据库权限
sql server
learning-striving1 个月前
SQL server创建数据表
数据库·sql·mysql·sql server
正在走向自律2 个月前
从SQL Server到KingbaseES:一步到位的跨平台迁移与性能优化指南
数据库·oracle·sql server·国产数据库·kingbasees·信创改造
.NET修仙日记2 个月前
SQL Server实战指南:从基础CRUD到高并发处理的完整面试题库
面试·职场和发展·c#·.net·sql server·.net全栈经典面试题库
黑夜管理员2 个月前
Sql Server安装报错“服务没有及时响应启动或控制请求”
数据库·sql server