用SQL语句表示关系代数中的除法,用NOT EXISTS实现

数据库中的除法

数据库中的除法一般用在,关系代数题中有表示所有,全部,至少等词。

关系代数除法示例

题目来源:中国矿业大学2020年计算机应用技术考研真题
数据库表为
团队(团队编号,团队名称,人员数量,所属单位,联系电话)
项目(项目编号,项目名称,等级)
参与(团队编号,项目编号,负责内容,开始时间,是否结题)
其中,“开始时间”为日期型,格式为 YYYY/MM/DD;“是否结题”为布尔型,true 表示已经结题,false 表示还未结题。

  1. 用关系代数表示至少参与过“蓝鸟”队参与的所有项目的团队名称和联系电话。
    ∏ ∏ 团队名称,联系电话,项目编号 ( 团 队 ∞ 参 与 ) ÷ (团队∞参与)÷ ÷ ∏ ∏ 项目编号 ( σ (σ σ团队名称=“蓝鸟” ( 团 队 ∞ 参 与 ) ) (团队∞参与))

用SQL语句实现

  1. 将上述关系代数用SQL语句表示
//SQL
SELECT 团队名称,联系电话
FROM 团队 AS 团队1
WHERE NOT EXISTS 
(SELECT *
FROM 团队,参与
WHERE 团队.团队编号=参与.团队编号 
AND 团队名称='蓝鸟'
AND NOT EXIST
(SELECT *
FROM 参与 AS 参与1
WHERE 参与1.团队编号=团队1.团队编号
AND 参与1.项目编号=参与.项目编号));

如果你能通过分析直接写出上述代码,那么就无需看接下来转换

将关系代数转化为SQL语句

我们将NOT EXIST实现除法的SQL语句分为三部分,看每一部分是如何来的。
三层结构

  • 第一层:要查什么属性,并且这些属性来自于哪一个表,我们就将其写在第一层;团队名称,联系电话是我们想要的属性,它来自团队表,起别名是因为,第二层中也有团队,防止冲突。
  • 第二层:关系代数除法,除数是什么就将其放在第二层,SELECT * 是固定格式;除数为 ∏ ∏ 项目编号 ( σ (σ σ团队名称=“蓝鸟” ( 团 队 ∞ 参 与 ) ) (团队∞参与)) ,写在第二层。
  • 第三层:第三层“连接”第一层和第二层,哪种表用来“连接”就将其放在第三层,SELECT * 是固定格式;参与表是用来“连接”的表,这里的“连接”指的是通过那种属性进行除运算,该题通过项目编号进行除运算,而项目编号在被除数中来自参与表,所以通过参与表“连接”第一层和第二层,起别名是因为第二层中也有参与,防止冲突。

通过分析上面三层,我们就通过关系代数实现了SQL语句的除法。

后言

该方法是通过实践分析得到的方法不是理论推导得到的方法,博主自己建立数据库使用上述方法做查询,结果没有问题。

  • 13
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一步一个脚印ッ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值