sql判断整除_关系代数中除法的SQL实现

本文介绍了如何在SQL中实现关系代数中的除法操作,通过具体实例展示了如何找出掌握所有指定技能的人。在不支持MINUS或EXCEPT的数据库中,通过集合谓词和子查询来实现这一操作,尽管过程复杂,但最终的SQL语句能够有效地解决此类问题。
摘要由CSDN通过智能技术生成

关系代数中除法的SQL实现

文章目录

引言

关系代数中的运算主要有选择、投影、连接(或者说乘法,即笛卡尔积)、除法,以及集合运算。其中,选择、投影、连接能直接用SQL表达,但除法和大部分集合运算不能。尤其是除法的缺失,使得涉及该操作的查询难以编写。本文将介绍用如何现有SQL实现除法,并分析困难产生的原因。

除法

笛卡尔积的逆

关系除法可以看作笛卡尔积的逆,即对于R÷SR\div SR÷S,其结果为所有满足T×S⊆RT\times S\subseteq RT×S⊆R的TTT中最大的那个,有

T=π(R)−π((π(R)×S)−R)T=\pi(R)-\pi((\pi(R)\times S)-R)T=π(R)−π((π(R)×S)−R)

可以将该结论表达为SQL以实现除法吗?在不支持MINUS, EXCEPT的数据库中不能。由于R至少有两列,用NOT EXISTS实现MINUS并不简单。

SQL实现

应用场景举例

假设如下关系,

人与技能

person

skill

张大仙

LOL

殷子

卫小妹

CV

成少

LOL

孙文涛

Java

张大仙

打剑

张大仙

机器学习

成少

机器学习

卫小妹

需求的技能

skill

LOL

机器学习

要求:找出P

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值