【发布时间】:2013-05-31 16:19:03
【问题描述】:
我有这个问题。
对于两个表:第一个是员工: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
同样的问题,但使用关系代数语言编写。这个问题让我很头疼,因为我懂这门语言,只要做一些简单的操作:joinselectionprojectiondifference。所以,很多我不知道如何处理的 SQL 命令,例如:group by 或 count。
谢谢:)
【问题讨论】:
-
不要这样写“
FROM Employee,Room”。这不好。使用 JOIN 关键字:FROM Employee INNER JOIN Room ON employee.roomID = Room.roomID。在这个阶段它并不那么重要,但是当您开始构建更严格的查询时,它会产生巨大的不同。 -
@JoelCoehoorn 并不是说您的评论对发帖人有任何帮助,您可以为该声明引用什么推理?如果程序员不希望您以某种他们不允许构造的方式执行此操作,我总是有这样的印象?
-
语法存在的原因是历史性的。它来自 ansi-89 标准。 ansi-92 和更高版本更喜欢使用 join 关键字,最近的一些标准甚至在某些情况下弃用了旧的 A,B 语法。
-
@JoelCoehoorn 我很少看到有人使用 92 标准,除了这里(或非美国国家)。感谢您的彻底回复。我想这也回答了我的问题。 stackoverflow.com/questions/334201/…
-
顺便说一句,您可能想阅读元常见问题解答Should questions include “tags” in their titles?。请注意,特别不鼓励使用标签开头。我已经编辑了你的标题以反映这一点。我还在您的问题中添加了关系代数标签。