2.根据上一次实验所建立的数据库student和基本表s(学生表)、c(课程表)、sc(选课表),完成下列操作: (1)按课程号在C表上创建唯一性索引; (2)为sc表的学号和课程号字段创建一个复合唯一索引。 3.根据上一次实验所建立的数据库student和基本表s(学生表)、c(课程表)、sc(选课表),完成下列操作: (1)建立名为V_SC的视图,能够查看每个学生的姓名、选修课程名和成绩; (2)利用V_SC视图,查看每个学生的平均成绩在70分以上的学生姓名; (3)建立名为V_C的视图,该视图显示每门课的课程名和选修该课程的学生人数; (4)修改视图V_C,在视图中增加一列,显示选修该课程所有学生的平均成绩; (5)建立名为V_IS_Sdept的视图,可以用来查看“信息系”的学生的学号、姓名、年龄和系名,并保证对该视图的修改满足系名为信息系的条件; (6)建立名为V_S的视图,可以用来查看每个学生选修的课程门数和平均成绩; (7)利用V_S视图,查询平均成绩在80分以上的学生学号; (8)删除视图V_S、V_C、V_SC、V_IS_Sdept。
时间: 2024-03-25 17:40:11 浏览: 113
对于问题2和问题3,我可以给出一些相关的 SQL 语句:
问题2:
(1) 创建唯一性索引:
```
CREATE UNIQUE INDEX idx_c ON c(cno);
```
(2) 创建复合唯一索引:
```
CREATE UNIQUE INDEX idx_sc ON sc(sno, cno);
```
问题3:
(1) 创建视图V_SC:
```
CREATE VIEW V_SC AS
SELECT s.sname, c.cname, sc.grade
FROM s, c, sc
WHERE s.sno = sc.sno AND c.cno = sc.cno;
```
(2) 查看平均成绩在70分以上的学生姓名:
```
SELECT s.sname
FROM s, V_SC
WHERE s.sno = V_SC.sno
GROUP BY s.sname
HAVING AVG(V_SC.grade) > 70;
```
(3) 创建视图V_C:
```
CREATE VIEW V_C AS
SELECT c.cname, COUNT(DISTINCT sc.sno) AS count
FROM c, sc
WHERE c.cno = sc.cno
GROUP BY c.cname;
```
(4) 修改视图V_C,在视图中增加一列,显示选修该课程所有学生的平均成绩:
```
CREATE OR REPLACE VIEW V_C AS
SELECT c.cname, COUNT(DISTINCT sc.sno) AS count, AVG(sc.grade) AS avg_grade
FROM c, sc
WHERE c.cno = sc.cno
GROUP BY c.cname;
```
(5) 创建视图V_IS_Sdept:
```
CREATE VIEW V_IS_Sdept AS
SELECT s.sno, s.sname, s.age, d.dname
FROM s, d
WHERE s.sdept = d.dname AND d.dname = '信息系';
```
(6) 创建视图V_S:
```
CREATE VIEW V_S AS
SELECT sc.sno, COUNT(DISTINCT sc.cno) AS count, AVG(sc.grade) AS avg_grade
FROM sc
GROUP BY sc.sno;
```
(7) 查看平均成绩在80分以上的学生学号:
```
SELECT V_S.sno
FROM V_S
WHERE V_S.avg_grade > 80;
```
(8) 删除视图:
```
DROP VIEW V_SC;
DROP VIEW V_C;
DROP VIEW V_IS_Sdept;
DROP VIEW V_S;
```
阅读全文