已知如下关系数据库模式: 关系Student记录学⽣信息,包括学号(sid)、姓名(name)、所在系(department)、电⼦ 邮件(email)。 关系Course记录课程信息,包括课号(cid)、课程名(title)、学分(credit)。 关系Enroll记录学⽣选课信息,包括学号(sid)、课号(cid)、成绩(score)。 回答下列问题: 1. (4分)分别⽤SQL和关系代数查询"Elsa"选修过的课程的课号及名称。 2. (4分)分别⽤SQL和关系代数查询所选课程的总学分低于120的学⽣的学号及所选课程的总学分。 3. (4分)分别⽤SQL和关系代数查询没有选修过"Database Systems",却选修了"Data Mining"的 学⽣的学号。 4. (2分)⽤SQL创建⼀个视图Unqulified(cid, title, cnt),记录每⻔课程的不及格⼈数,其中cid和 title的含义与数据库中的同名属性相同,cnt表示这⻔课不及格的学⽣⼈数。 5. (2分)是否可以在视图Unqualified上进⾏INSERT、DELETE或UPDATE操作?说明原因。 6. (4分)⽤SQL编写⼀个查询,说明如何根据该查询的结果验证Student的关系实例是否满⾜函数依 赖email → sid
时间: 2024-01-18 17:03:46 浏览: 91
1. SQL查询:
```SQL
SELECT Course.cid, Course.title
FROM Student, Course, Enroll
WHERE Student.sid = Enroll.sid AND Course.cid = Enroll.cid AND Student.name = 'Elsa';
```
关系代数查询:
$$
\pi_{cid, title}(\sigma_{name='Elsa'}(Student \times Enroll \times Course))
$$
2. SQL查询:
```SQL
SELECT Enroll.sid, SUM(Course.credit) AS total_credits
FROM Enroll, Course
WHERE Enroll.cid = Course.cid
GROUP BY Enroll.sid
HAVING SUM(Course.credit) < 120;
```
关系代数查询:
$$
\pi_{sid, total\_credits}(\rho_{(sid, total\_credits)}(\sigma_{\sum credit < 120}(Enroll \bowtie Course)) )
$$
3. SQL查询:
```SQL
SELECT Enroll.sid
FROM Enroll
WHERE Enroll.cid = 'Data Mining' AND Enroll.sid NOT IN
(SELECT Enroll.sid FROM Enroll WHERE Enroll.cid = 'Database Systems');
```
关系代数查询:
$$
\pi_{sid}(\sigma_{cid='Data Mining'}(Enroll)) - \pi_{sid}(\sigma_{cid='Database Systems'}(Enroll))
$$
4. SQL创建视图:
```SQL
CREATE VIEW Unqualified AS
SELECT Enroll.cid, Course.title, COUNT(*) AS cnt
FROM Enroll, Course
WHERE Enroll.cid = Course.cid AND Enroll.score < 60
GROUP BY Enroll.cid, Course.title;
```
5. 不能在视图Unqualified上进行INSERT、DELETE或UPDATE操作,因为Unqulified是一个由Enroll和Course计算得到的虚拟表,其数据实际上存储在Enroll和Course表中,对Unqualified的操作实际上是对Enroll和Course表的操作,因此对Unqualified进行的INSERT、DELETE或UPDATE操作会影响到Enroll和Course表的数据完整性和一致性。
6. SQL查询:
```SQL
SELECT COUNT(DISTINCT Student.sid)
FROM Student
LEFT JOIN (SELECT Enroll.sid FROM Enroll GROUP BY Enroll.sid HAVING COUNT(DISTINCT Enroll.cid) > 1) AS T
ON Student.sid = T.sid
WHERE T.sid IS NULL;
```
查询结果为0,则说明Student的关系实例满足函数依赖email → sid。
阅读全文