tldr; 以下哪三个你不能用RA写?
我们的教授要求我们编写 3 个 SQL 查询。然后他问我们其中哪些不能用关系代数写出来。它们如下:
给定以下 3 个表:
Students (sID, sName); (Primary Key sID)
Courses (cID, cName); (Primary Key cID)
Enrolled (sID, cID, sectID, grade) (Primary Key sID, cID)
where foreign key (sID) references Students,
foreign key (cID) references Courses.
- 找到最大的学生证。
- 获取 COMP 4380 的类列表(由 <sID, sName> 组成),并按照 sName 的字母顺序排列列表中的记录。(他只想要所有上过这门课的学生)。
- 计算每门课程注册的学生人数(由课程 ID 标识)。
所以我们有:
- 涉及在整数列中查找最大值的查询。
- 涉及按字母顺序对结果进行排序的查询。
- 涉及计数多个组的查询。
我已经设法为#1 写了一个 RA 声明(这里有详细信息),所以我知道不是这样。但是,我不确定 2 和 3。您如何使用 RA 操作进行排序?你怎么能数出多个组?我猜3 是可能的,因为 RA 可以扩展为计数作为聚合函数。
以下是我为回答教授最初的问题而提出的 SQL 语句:
SELECT max(sID)
FROM Students
SELECT sID, sName
FROM Enrolled INNER JOIN Students
WHERE cID="COMP 4380"
ORDER BY sName
SELECT count(sID), cID
FROM Enrolled
GROUP BY cID
我无法在 RA 中写出 2 和 3。