15、SQL Server 使用子查询和CTE提供数据之关系除

本文介绍了SQL Server中如何利用子查询和公共表表达式(CTE)进行关系除法操作,包括关系整除和带余数的关系除法。关系除法是与关系乘法互补的概念,可用于找出满足特定条件的数据子集。文章通过多个示例,如查询通过所有必修课的学生、购买所有商品的客户等,详细解释了如何编写和理解关系除法查询,以及如何通过嵌套子查询和比较行数来实现关系除法。
摘要由CSDN通过智能技术生成

使用子查询和CTE提供数据之关系除

前面有讨论过交叉联接是关系乘法---将两个数据集相乘得到笛卡尔乘积。

从理论上来说,所有联接都是有限制的交叉联接,如内联接就是从两个数据集的关系乘积

中选取关键键值匹配的行。

一、关系除与关系乘、联接之间的关系以及关系除的种类

关系除与关系乘之间是互补。如果知道了笛卡尔乘积和一个乘数数据集,使用关系除

就可以推断出另一个乘数集。

有两个关系除:1、带余数的关系除 2、关系整除

一个经典的关系除示例是:哪些学生通过了所有必修课。

关系整除查询:只列出通过了所有必修课的学生。

带余数的关系除查询(也称为近似除):不仅列出所有通过了必修课的学生,还列出了通过

其他课程的学生。

联接/子查询和关系除用来解决不同类型的问题,下面是一些示例:

1、使用联接/子查询解决

Q1:谁参加过旅行团?

Q2:谁居住在营地所在的地区?

Q3:谁在其居住地参加了活动?

2、关系整除

Q1:谁参加过其居住州的每个旅行团,但没有参加过任何其他旅行团?

Q2:谁购买了每种风筝,但未购买任何其他商品?

Q3:哪些妇女(已离异)嫁过同一个男人,但没有同其他男人结过婚?

3、带余数的关系除

Q1:谁参加了其所在州的每个旅行团,且可能参加过其他旅行团?

Q2࿱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值