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

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

  • 数据库中的除法
  • 关系代数除法示例
  • 用SQL语句实现
  • 将关系代数转化为SQL语句
  • 后言

数据库中的除法

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

关系代数除法示例

题目来源:中国矿业大学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语句分为三部分,看每一部分是如何来的。
用SQL语句表示关系代数中的除法,用NOT EXISTS实现_第1张图片

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

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

后言

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

你可能感兴趣的:(sql,数据库,database)