2010/71. 有4个关系模式如下:出版社(出版社编号,出版社名称);图书(图书编号,书名,出版社编号,定价);作者(作者编号,姓名);著书(图书编号,作者编号,作者排序)注:作者排序=1表示第一作者,依此类推。
用SQL语句,完成第36~39题。
(1).检索所有定价超过20元的书名。
答案:SELECT书名(1分)FROM图书(1分)WHERE定价>20(2分)(2).统计每个出版社图书的平均定价。
答案:SELECT出版社编号,A VG(定价)(2分)FROM图书(1分)GROUP BY出版社编号(1分)(3).将科学出版社的所有图书定价下调5%。
答案:UPDATE图书SET定价=定价*0.95(1分)WHERE出版社编号IN(1分)(SELECT出版社编号FROM出版社(1分)WHERE出版社名称="科学")(1分)【说明】WHERE出版社名称LIKE"科学"也正确。
(4).列出所有图书的书名、第一作者姓名和出版社名称。
答案:SELECT书名,姓名,出版社名称(1分)FROM出版社A,图书B,作者C,著书D(1分)WHEREA.出版社编号=B.出版社编号ANDB.图书编号=D.图书编号(1分)ANDC.作者编号=D.作者编号AND作者排序=1。
(1分)S(SNO,SNAME,AGE,SEX,SDEPT)SC(SNO,CNO,GRADE)C(CNO,CNAME,CDEPT,TNAME)1.试用SQL的查询语句表达下列查询:①检索LIU老师所授课程的课程号和课程名。
②检索年龄大于23岁的男学生的学号和姓名。
③检索至少选修LIU老师所授课程中一门课程的女学生姓名。
④检索W ANG同学不学的课程的课程号。
⑤检索至少选修两门课程的学生学号。
⑥检索全部学生都选修的课程的课程号与课程名。
⑦检索选修课程包含LIU老师所授课程的学生学号。
2.试用SQL查询语句表达下列对教学数据库中三个基本表S、SC、C的查询:①统计有学生选修的课程门数。
②求选修C4课程的学生的平均年龄。
③求LIU老师所授课程的每门课程的学生平均成绩。
④统计每门课程的学生选修人数(超过10人的课程才统计)。
要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
⑤检索学号比WANG同学大,而年龄比他小的学生姓名。
⑥检索姓名以WANG打头的所有学生的姓名和年龄。
⑦在SC中检索成绩为空值的学生学号和课程号。
⑧求年龄大于女同学平均年龄的男学生姓名和年龄。
⑨求年龄大于所有女同学年龄的男学生姓名和年龄。
3.试用SQL更新语句表达对教学数据库中三个基本表S、SC、C的各个更新操作:①往基本表S中插入一个学生元组('S9','WU',18)。
②在基本表S中检索每一门课程成绩都大于等于80分的学生学号、姓名和性别,并把检索到的值送往另一个已存在的基本表STUDENT(SNO,SNAME,SEX)。
③在基本表SC中删除尚无成绩的选课元组。
④把W ANG同学的学习选课和成绩全部删去。
⑤把选修MA THS课不及格的成绩全改为空值。
⑥把低于总平均成绩的女同学成绩提高5%。
⑦在基本表SC中修改C4课程的成绩,若成绩小于等于75分时提高5%,若成绩大于75分时提高4%(用两个UPDA TE语句实现)。
4.设教学数据库的模式如下:S(S#,SNAME,AGE,SEX)SC(S#,C#,GRADE)C(C#,CNAME,TEACHER)试用多种方式定义下列完整性约束:(1)在关系S中插入学生年龄值应在16~25岁之间(2)在关系SC中插入元组时,其S#值和C#值必须分别在S和C中出现。
(3)在关系SC中修改GRADE值时,必须仍在0~100之间。
(4)在删除关系C中一个元组时,首先要把关系SC中具有同样C#的元组全部删去。
(5)在关系S中把某个S#值修改为新值时,必须同时把关系SC中那些同样的S#值也修改为新值。
1.解:(1)检索LIU老师所授课程的课程号和课程名。
SELECT C#,CNAME FROM CWHERE TEACHER=…LIU‟(2)检索年龄大于23岁的男学生的学号和姓名。
SELECT S#,SNAME FROM SWHERE (AGE>23) AND (SEX=…M‟)(3)检索至少选修LIU老师所授课程中一门课程的女学生姓名。
SELECT SNAMEFROM SWHERE SEX=…F‟ AND S# IN(SELECT S#FROM SCWHERE C# IN(SELECT C#FROM CWHERE TEACHER=…LIU‟)(4)检索W ANG同学不学的课程的课程号。
SELECT C#FROM CWHERE C# NOT IN(SELECT C#FROM SCWHERE S# IN(SELECT S#FROM SWHERE SNAME='WANG'))(5)检索至少选修两门课程的学生学号。
SELECT S#FROM SCGROUP BY S#HA VING COUNT(C#)>=2(6)检索全部学生都选修的课程的课程号与课程名。
SELECT C#,CNAMEFROM CWHERE NOT EXISTS(SELECT *FROM SWHERE NOT EXISTS(SELECT *FROM SCWHERE SC.S#=S.S# AND SC.C#=C.C#))(7)检索选修课程包含LIU老师所授课的学生学号。
SELECT S#FROM SWHERE S# IN(SELECT S#FROM SCWHERE S.S#=SC.S# AND C# IN(SELECT C#FROM CWHERE TEACHER='LIU'))(请讨论一下,本题是否可如此:SELECT DISTINGCTS# FROM SC WHERE EXISTS (SELECT C# FROM C WHERE TEACHER='LIU'))2.答:①SELECT COUNT(DISTINCT CNO)FROM SC;②SELECT A VG(AGE)FROM S, SCWHERE S.SNO=SC.SNO AND CNO=‟C4‟;③SELECT O, CNAME, A VG(GRADE)FROM SC, CWHERE O=O AND TNAME=‟LIU‟GROUP BY O;④SELECT CNO, COUNT(SNO)FROM SCGROUP BY CNOHA VING COUNT(*)>10ORDER BY 2 DESC, CNO ASC;⑤SELECT X.SNAMEFROM S AS X, S AS YWHERE Y.SNAME=‟WANG‟AND X.SNO>Y.SNO AND X.AGE<Y.AGE;⑥SELECT SNAME, AGEFROM SWHERE SNAME LIKE ‟WANG%‟;⑦SELECT SNO, CNOFROM SCWHERE GRADE IS NULL;⑧SELECT SNAME, AGEFROM SWHERE SEX=‟M‟AND AGE> (SELECT A VG(AGE)FROM SWHERE SEX=‟F‟);⑨SELECT SNAME, AGEFROM SWHERE SEX=‟M‟AND AGE>ALL(SELECT AGEFROM SWHERE SEX=‟F‟);3.答案:①INSERT INTO S(SNO, SNAME, AGE)V ALUES(…S9‟, …WU‟, 18);②INSERT INTO STUDENTSELECT SNO, SNAME, SEXFROM SWHERE 80<=ALL(SELECT GRADEFROM SCWHERE SNO=S.SNO);③DELETE FROM SCWHERE GRADE IS NULL;④DELETE FROM SCWHERE SNO IN (SELECT SNOFROM SWHERE SNAME=‟W ANG‟);⑤UPDATE SCSET GRADE=NULLWHERE GRADE<60AND CNO IN (SELECT CNOFROM CWHERE CNAME=‟MATHS‟);⑥UPDATE SCSET GRADE=GRADE*1.05WHERE SNO IN (SELECT SNOFROM SWHERE SEX=‟F‟)AND GRADE< (SELECT A VG(GRADE)FROM SC);⑦UPDATE SCSET GRADE=GRADE*1.04WHERE CNO=‟C4‟ AND GRADE>75;UPDATE SCSET GRADE=GRADE*1.05WHERE CNO=‟C4‟ AND GRADE<=75;注:这两个语句顺序不能颠倒。
4.答:(1)定义S时采用检查子句:CREAT TABLE S(S# CHAR(4),SNAME char (10) NOT NULL ,AGE SMALLINT ,primary key(S#)CHECK (AGE>=16 and AGE<=25))(2)采用外键子句约束CREAT TABLE SC(S# CHAR(4),C# CHAR(4),GRADE SMALLINT,FOREIGN key(S#) REFERENCE S(S#)FOREIGN key(C#) REFERENCE C(C#)(3)采用元组检查CREAT TABLE SC(S# CHAR(4),C# CHAR(4),GRADE SMALLINT,FOREIGN key(S#) REFERENCE S(S#)FOREIGN key(C#) REFERENCE C(C#)CHECK (GRADE>=0 and AGE<=100))(4)采用外键约束CREAT TABLE SC(S# CHAR(4),C# CHAR(4),GRADE SMALLINT,FOREIGN key(S#) REFERENCE S(S#),FOREIGN key(C#) REFERENCE C(C#))注,在ON DELETE短语缺省的时候表示RESTRICT方式。
(5)采用外键约束CREAT TABLE SC(S# CHAR(4),C# CHAR(4),GRADE SMALLINT,FOREIGN key(S#) REFERENCE S(S#) ON UPDATE CASCADE , FOREIGN key(C#) REFERENCE C(C#))2009/07有一个教学数据库,包括三个关系模式:(1)学生S(S#,SNAME,AGE,SEX)其属性的含义依次为学号、姓名、年龄、性别(2)学习SC(S#,C#,GRADE)其属性的含义依次为学号、课程号、成绩(3)课程C(C#,CNAME,TEACHER)学生关系其属性的含义依次为课程号、课程名、任课教师根据以上3个关系模式用SQL语句完成36~39题。