如何将Sql命令转换为关系代数?

时间:2013-05-31 16:19:03

标签: sql relational-algebra

我有这个问题。

两个表:第一个是员工:Employee(id, roomID),第二个是:Room(roomID, roomName)

问题是:每个房间有多少员工。

我可以在SQL语言中轻松完成这项工作:

select Room.roomID, COUNT(Employee.id) as NumofEmployee
from Employee, Room
where employee.roomID = Room.roomID
group by Room.roomID

同样的问题,但是在关系代数语言下写作。这个问题让我很头疼,因为我知道用这种语言,只需要做一些简单的操作:join selection projection difference。因此,许多SQL命令我不知道如何处理,例如:group bycount

谢谢:)

1 个答案:

答案 0 :(得分:4)

无法从基本关系代数运算构造聚合和分组操作。您必须定义自己的COUNTGROUP BY运算符才能执行此操作。

你可以使用基本关系代数的许多建议扩展,或者你甚至可以定义自己的扩展 - 但为了正式这样做,我怀疑数学会变得相当复杂。

这里可以找到一个简单的提案(没有太多形式),http://myweb.lmu.edu/dondi/share/db/relational3.pdf。 (第3.2节)

使用该链接中提出的扩展代数,您的表达式将写成: