T-SQL查询——数据集之间的运算
关系数据库的起源起源于数学中的集合概念,所以集合和集合之间,也同样继承了数学集合之间的运算,而对于在关系数据库中,常常用于两个数据库中并没有直接的关系数据库的”关系“,比如外键,但两个数据集会有间接的关系,比如两届比赛,参加比赛人员集合之间会有间接的关系。
在T-SQL中,关系运算实际上可以分为四类,首先看我们举例子用的表:这里的例子表分别为两个不同会以参加的人员记录,分别为Meeting1和Meeting2如下:
关系运算的具体可以分为以下四类:
1.A∩B,既是所求数据集既在A中,又在B中
在实例表中,实际的例子为即参加第一个会以,有参加第二个会以人的集合,如下图:
2.A∪B,既所求数据在数据集A中,或在数据集B中
3.A-B,既所求数据在数据集A中,不在数据集B中
在实例表中,实际的例子为参加了第一个会议,同时没有参加第二个会议的人的集合,如下图:
4.B-A,既所求数据在数据集B中,不在数据集A中
这个其实和上面第三种情况没有本质区别,只是顺序颠倒了一下,如下图:
数据集的来源
在T-SQL中,参与数据集运算的两个数据集可以来自任何数据集的表达式,比如,一张表,一张表的子集,多张表,临时表变量,虚拟列,甚至是一个scalar值
数据集运算的条件
并不是所有的数据集都可以做运算,就像一个苹果+一个鸭梨不等于2一样,在T-SQL中,数据集之间的运算需要符合下面说那个条件:
1、两个数据集之间必须有相同的数量的列
2、两个数据集之间列出现的次序必须一致
3、两个数据集之间每一个对应的列的数据类型必须匹配
数据集运算在T-SQL中的实现
1、 T-SQL中提供了Union来实现AUB运算,实际上union有两个版本,分为为:
union
union表示了AUB的关系,当遇到两个数据集中相同的行是,保留唯一一个:
union all
union all同样实现了AuB的逻辑,但与union不同的是,当遇到两个数据集中重复的行时,全部保留:
2、A∩B,使用intersect实现关键字来实现A∩B的关系:
T-SQL提供了intersect关键字来实现A∩B的关系
3、A-B,使用Except实现
T-SQL提供了except关键字来实现A-B的关系
数据集运算的别名和排序
如果没有为数据列指定别名,则数据列的名称按照出现在第一个集合对应的列名算:
做union后:
如若我们想定义列名,则需要为数据集运算中出现在第一位的数据集指定别名:
对运算后的结果进行排序
对运算后的结果进行排序是一件非常简单的事情,只需要在运算的最后加上order by 子句,但是这里一定要注意:
1、order by是对整个运算后的结果排序,并不是对单个数据集
2、order by后面排序的字段名称是第一个数据集的字段名或者别名
转自http://www.cnblogs.com/CareySon/archive/2011/10/13/2210156.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架