【问题标题】:convert sql query into relational algebra将sql查询转换为关系代数
【发布时间】:2015-12-22 00:09:40
【问题描述】:
我需要帮助将 sql 查询转换为关系代数。
例如,假设我有一个随机的英文 SQL 查询,由 5 个部分组成:
- 选择奥尔巴尼的所有学校
- 到达那里的总学校 gpa(学生 gpa 的/计数学生)
- 学校平均gpa
- 限制前 10 名学校
- 按学校总 GPS 排名
所以我已经创建了关系代数。
σ rownum() > 0 & rownum() ≤ 10
(π student gpa’s / count student -> total school gpa
(σ school = ‘albany’ & total school gpa < 3.5 (school Table)))
我的问题:有人可以仔细检查我的解决方案并让我知道这是否有误。
【问题讨论】:
标签:
relational-database
relational-algebra
【解决方案1】:
TL;DR 您似乎是从 SQL 翻译而来,但您并没有将自己限制在所获得的任何 RA(关系代数)的特征上。
如果不知道您的 RA 以及您的基本关系的列和含义,我们无法回答您的问题。
如果你想用 SQL 来思考,你需要找出每个 RA 运算符在 SQL 中的表达方式。 RA 中没有 NULL。关系中没有行号。您的 RA 可能有也可能没有有序的属性和/或重复的属性名称和/或带有别名的属性。您需要清楚什么是“关系”以及您的 RA 中的“运算符”是什么。
在 RA 中通常没有函数,只有比较。 (尽管如果您没有获得学校平均 gpas,那么您需要使用算术除法。)没有 count() 或 rownum()。投影中通常没有重命名。一些 RA 的选择/限制运算符不允许布尔连接词。没有排序。您所依赖的,但不是要求的。您不清楚您的基本关系名称或属性或含义。
查看执行(n SQLish 版本)RA 的 RelaX。