数据库系统大题
①一个学生可选修多门课,一门课有若干学生选修; ②一个教师可讲授多门课,一门课只有一个教师讲授; ③一个学生选修一门课,仅有一个成绩。 要求:根据上述语义画出 ER 图,要求在图中画出实体的属性并注明联系的类型; 解答: 课程号课程名 1、设有如下所示的关系 S(S#,SNAME,AGE,SEX)、C(C#,CNAME,TEACHER)和SC(S#,C#,GRADE),试用关系 学号 代数表达式表示下列查询语句: 学生选修 (1)检索“程军”老师所授课程的课程号(C#)和课程名(CNAME)。 课程 mn 姓名 (2)检索年龄大于 21 的男学生学号(S#)和姓名(SNAME)。 n (3)检索至少选修“程军”老师所授全部课程的学生姓名(SNAME)。 成绩 讲授 (4)检索”李强”同学不学课程的课程号(C#)。 (5)检索至少选修两门课程的学生学号(S#)。 1 (6)检索全部学生都选修的课程的课程号(C#)和课程名(CNAME)。 教师 (7)检索选修课程包含“程军”老师所授课程之一的学生学号(S#)。 教师编号 (8)检索选修课程号为 k1 和 k5 的学生学号(S#)。 (9)检索选修全部课程的学生姓名(SNAME)。 (10)检索选修课程包含学号为 2 的学生所修课程的学生学号(S#)。 (11)检索选修课程名为“C 语言”的学生学号(S#)和姓名(SNAME)。 解:本题各个查询语句对应的关系代数表达式表示如下: (1). ∏C#,CNAME(σTEACHER=‘程军’(C)) (2). ∏S#,SNAME(σAGE21∧SEX=”男”(C)) (3). ∏SNAME{s[∏S#,C#(sc)÷∏C#(σTEACHER=‘程军’(C))]} SC) 教师姓名 (4). ∏C#(C)- ∏C#(σSNAME=‘李强’(S) (5). ∏S#(σ[1]=[4]∧[2]≠[5] (SC× SC)) (6). ∏C#,CNAME(C (7). ∏S#(SC (∏S#,C#(sc)÷∏S#(S))) ∏C#(σTEACHER=‘程军’(C))) (8). ∏S#,C#(sc)÷∏C#(σC#=’k1’∨ C#=’k5’(C)) (9). ∏SNAME{s[∏S#,C#(sc)÷∏C#(C)]} (10). ∏S#,C#(sc)÷∏C#(σS#=’2’(SC)) (11). ∏S#,SNAME{s[∏S#(SCσCNAME=‘C 语言’(C))]} 2、关系 R 和 S 如下图所示,试计算 R÷S。 R ABCD a a a b b c c b b b d d k k c e h e d c e d f k f l d f S C c e D d f 1、设有如下关系表 R: R(No,NAME,SEX,AGE,CLASS) 主关键字是 NO 其中 NO 为学号,NAME 为姓名,SEX 为性别,AGE 为年龄,CLASS 为班号。 写出实现下列功能的 SQL 语句。 ①插入一个记录(25,“李明”,“男”,21,“95031”); ②插入“95031”班学号为 30、姓名为“郑和”的学生记录; ③将学号为 10 的学生姓名改为“王华”; ④将所有“95101”班号改为“95091”; ⑤删除学号为 20 的学生记录; ⑥删除姓“王”的学生记录; 答案: ①INSERT INTO R VALUES(25,“李明”,“男”,21,“95031”) ②INSERT INTO R(NO,NAME,CLASS)VALUES(30,“郑和”,“95031”) ③UPDATE R SET NAME=“王华”WHERENO=10 ④UPDATE R SET CLASS=“95091”WHERE CLASS=“95101” ⑤DELETE FROM R WHERE NO=20 ⑥DELETE FROMR WHERE NAME LIKE“王%” 2、设学生课程数据库中有三个关系: 学生关系 S(S#,SNAME,AGE,SEX) 学习关系 SC(S#,C#,GRADE) 课程关系 C(C#,CNAME) 其中 S#、C#、SNAME、AGE、SEX、GRADE、CNAME 分别表示学号、课程号、姓名、年龄、性别、 成绩和课程名。 用 SQL 语句表达下列操作 (1)检索选修课程名称为“MATHS”的学生的学号与姓名 (2)检索至少学习了课程号为“C1”和“C2”的学生的学号 (3)检索年龄在 18 到 20 之间(含 18 和 20)的女生的学号、姓名和年龄 (4) (5)将选修课程号为“C1”的同学成绩加 5 分 (6)找出每个学生超过他选修课程平均成绩的课程号 (7)查询查询选修“C2”号课程且成绩在 90 分以上的所有学生。 (8)查询所有姓刘的学生的姓名、学号和性别 (9)检索平均成绩超过 80 分的学生学号和平均成绩 (10)检索选修了全部课程的学生姓名 (11)检索选修了三门课以上的学生的姓名 (12)创建视图 stu_info,包括选修“C1”号课程所有学生的学号、姓名、性别、年龄、选修课程号、课程 名、成绩 答案: (1)SELECT SNAME,AGE FROM S,SC,C WHERE S.S#=SC.S# AND C.C#=SC.C# AND CNAME=’ MATHS’ (2) SELECT S# FROM SC WHERE CNO=’C1’ AND S# IN( SELECT S# FROM SC WHERE CNO=’C2’) (3)SELECT S#,SNAME,AGE FROM S WHERE AGE BETWEEN 18 AND 20 (4) INSERT INTOS(S#,SNAME,AGE,SEX) VALUES(“”,”王丽”,19,”女”); (5) UPDATE SC SET GRADE = GRADE+5 WHEREC#=‘C1’; (6) SELECT S#,C# FROM SXWHERE GRADE=(SELECT AVG(GRADE)FROM C Y WHERE Y.S#=X.S#); (7) SELECT S.S#,SNAME FROM S,SC WHERE S.S#=SC.S# AND SC.C#=’C2’ AND SC.GRADE90; (8) SELECT SNAME,S#,SEX FROM S WHERE LIKE ‘刘%’; (9) SELECT S# ,AVG(GRADE) ‘平均成绩’ FROM SC GROUP BY S# HAVING AVG(GRADE)80 (10) SELECTSNAME FROMS WHERENOTEXISTS (SELECT* FROMC WHERE NOTEXISTS (SELECT* FROMSC WHERE S#=S.S#AND C#=C.C# ) ) (11) SELECT SNAME FROM S,SC WHERE S.S#=SC.S# GROUP BY SNAME HAVING COUNT(*)3 (12)CREATEVIEWSTU_INFOAS SELECT S.SNO,SNAME,SEX,AG