1.
【说明】
某教务管理系统的部分数据库关系模式如下:
学生:STUDENT(Sno,Sname,Ssex,Sage,Sdept),各属性分别表示学号、姓名、性别、年龄、所在系名;
课程:COURSE(Cno,Cname,Cpno,Ceredit),各属性分别表示课程号、课程名、选修课的课程号、学分;
选课:SC(Sno,Cno,Grade),各属性分别表示学号、课程号、成绩。
有关关系模式的说明如下:
(1)下划线标出的属性是表的主键。
(2)课程名取值唯一。
根据以上描述,回答下列问题,将SQL语句的空缺部分补充完整。
完整性约束
【问题1】(3分)
请将下面创建课程表COURSE的SQL语句补充完整,要求定义实体完整性约束、参照完整性约束以及其他完整性约束。
CREATE TABLE COURSE(
Cno CHAR(4)PRIMARY KEY,
Cname CHAR(30) (a),
Cpno CHAR(4) REFERENCES (b) ((c))
Ccredit INT);课程:COURSE(Cno,Cname,Cpno,Ceredit)
实体完整性:保证表中的每一行数据是唯一的,已由主键(Primary Key)实现
参照完整性:保证表间关系正确,外键值必须在主表存在或为 NULL。
Cname是课程名,题目提到课程名唯一,因此Cname加上UNIQUE
Cpno 是外键,它参照的是同一个表 COURSE 的主键 Cno。
因此(b) COURSE (c) Cno
【问题2】(4分)
有一门课程号为“C036的新开课要求所有学生选修。该课的基本信息已经录入课程表COURSE中,现需在选课表SC中插入该课的选课记录。实现此功能的SQL语句如下,请补全。
(d) INTO SC(Sno, (e))
SELECT Sno, (f)
FROM (g );选课:SC(Sno,Cno,Grade) 学号、课程号、成绩
插入语法:
INSERT INTO 表名(列1, 列2) SELECT 列1, 列2[或常量] FROM 源表
插入选课记录,d填写INSERT
这道题只操作其中的两列,选课和成绩无关,另一列应当是课程号
e填写Cno
(f)处填入'C036'是因为该SQL语句需要为所有学生插入固定课程号" C036"的选课记录。此处'C036'是常量值,直接指定课程号,并非从STUDENT表中读取。
学号的信息只能是从学生表中来,因此G填写STUDENT
【问题3】(4分)
查询每一门课程的间接先修课(先修课的先修课),要求输出课程号和间接先修课的课程号。即使某门课程没有先修课,也需要输出,不过其间接先修课为空。此功能由下面的SQL语句实现,请补全。
SELECT K1.Cno, (h)
FROM COURSE K1 (i) OUTER JOIN COURSE K2 (j) ((k));
【问题4】(4分)
查询选修了课程表中已有全部课程的学生,要求输出学号和姓名。此功能由下面的SQL语句实现,请补全。
SELECT Sno,Sname FROM STUDENT
WHERE NOT EXISTS
(SELECT FROM (l)
WHERE (m)
(SELECT FROM (n)
WHERE(o) ));