将sql查询转换为关系代数

时间:2015-12-22 00:09:41

标签: relational-database relational-algebra

我需要帮助将sql查询转换为关系代数。

例如,假设我有一个英文随机SQL查询,由5部分组成:

    1. 选择所有在Albany的学校
    1. 到达那里学校gpa(学生gpa /计数学生)
    1. 平均学校gpa< 3.5
    1. 限制前10名学校
    1. 按学校总人数排名

所以我创造了关系代数。

σ rownum() > 0 & rownum() ≤ 10 
    (π student gpa’s / count student -> total school gpa 
         (σ school = ‘albany’ & total school gpa < 3.5 (school Table)))

我的问题:有人可以仔细检查我的解决方案并让我知道这是不是错了。

1 个答案:

答案 0 :(得分:0)

TL; DR 您似乎正在从SQL进行翻译,但您并没有将自己局限于您所获得的任何RA(关系代数)的功能。 我们无法在不知道您的RA以及您的基本关系的列和含义的情况下回答您的问题。

如果您想考虑SQL,您需要了解每个RA运算符将如何在SQL中表达。 RA中没有NULL。关系中没有行号。您的RA可能有也可能没有有序的属性和/或重复的属性名称和/或属性,其中点缀了别名。你需要明确什么是&#34;关系&#34;是什么&#34;运营商&#39;在你的RA。

RA中通常没有功能而是比较。 (虽然如果你没有获得学校平均gpas,那么你需要使用算术除法。)没有count()或rownum()。投影中通常没有重命名。一些RA&#39;选择/限制运算符不允许使用布尔连接词。没有排序。您依赖的是哪种,但不是要求。您不清楚您的基本关系名称或属性或含义。

查看执行(n SQLish版本)RA的RelaX。