1、数据库原理答案第二章2.6 设有关系R和S: R A B C S A B C 3 6 7 3 4 5 2 5 7 7 2 3 7 2 3 4 4 3计算RS,R-S,RS,RS,3,2(S),B5(R), R22S, R S。解: RS A B C RS A B C RS A B C 3 6 7 3 6 7 7 2 3 2 5 7 2 5 7 7 2 3 4 4 3 4 4 3 3 4 5RS R.A R.B R.C S.A S.B S.C 3,2(S) C B 3 6 7 3 4 5 5 4 3 6 7 7 2 3 3 2 2 5 7 3 4 5 2 5 7 7 2 3 7 2 3 3 4
2、5 7 2 3 7 2 3 4 4 3 3 4 5 4 4 3 7 2 322B5(R) A B C RS R.A R.B R.C S.A S.B S.C 7 2 3 7 2 3 3 4 5 4 4 3RS A B C 7 2 32.7 设有关系R和S: R A B S B C a b b c c b e a d e b d BC计算R S,R S,A=C(RS),S R。 BC解: RS A B C RS R.A R.B S.B C a b c a b b c a b d a b b d c b c c b b c c b d c b b d d e aS R B C b c b d 2.1
3、7 设有4个关系: S(S#,SNAME,AGE,SEX) SC(S#,C#,SCORE) C(C#,CNAME,T#) T(T#,TNAME,TITLE)试用关系代数表达式表示下列查询语句: 检索年龄小于17岁的女学生的学号和姓名。 检索男学生所学课程的课程号和课程名。 检索男学生所学课程的任课教师的工号和姓名。 检索至少选修两门课程的学生学号。 检索至少有学号为S2和S4学生选修的课程的课程号。 检索WANG同学不学的课程的课程号。 检索全部学生都选修的课程的课程号与课程名。 检索选修课程包含LIU老师所授全部课程的学生学号。解: S#,SNAME(AGE17 SEX=F(S) c#,CN
4、AME(SEX=M(SSCC) T#,TNAME(SEX=M(SSCCT) 1(1=4 25(SCSC) 2(1=S2 4=S4 2=5(SCSC) C#(C)C#(SNAME=WANG(SSC) C#,CNAME(C(S#,C#(SC)S#(S) S#,C#(SC)C#(TNAME=LIU(CT)2.21 在教学数据库的关系S、SC、C、T中,用户有一查询语句:检索女同学选修课程的课程名和任课教师名。 试写出该查询的关系代数表达式。 画出查询表达式的语法树。 使用启发式优化算法,对语法树进行优化,并画出优化后的语法树。解: 关系代数表达式为:CNAME,TEACHER(SEX=F(SSCCT
5、)上述的关系代数表达式为:CNAME,TEACHER(SEX=F(L(S.S#=SC.S# SC.C#=C.C#(SSC)C) 此处L为S、SC、C中全部属性(公共属性只取一次)。上述关系代数表达式的语法树如图2.2所示。图2.2C.T#=T.T# 上述的关系代数表达式为:优化后的语法树如图2.3所示。T#,TNAME图2.3S.S#=SC.S#CS#,C#SEX=F第三章3.2 对于教学数据库的4个基本表 S(S#,SNAME,AGE,SEX) SC(S#,C#,SCORE) C(C#,CNAME,T#) T(T#,TNAME,TITLE)试用SQL的查询语句表达下列查询:试用关系代数表达式
6、表示下列查询语句: 检索年龄小于17岁的女学生的学号和姓名。 检索年男学生所学课程的课程号和课程名。 检索男学生所学课程的任课教师的工号和姓名。 检索至少选修两门课程的学生学号。 检索至少有学号为S2和S4学生选修的课程的课程号。 检索WANG同学不学的课程的课程号。 检索全部学生都选修的课程的课程号与课程名。 检索选修课程包含LIU老师所授全部课程的学生学号。解: SELECT S#, SNAMEFROM SWHERE AGE10 ORDER BY 2 DESC, 1; SELECT SNAME FROM S WHERE S#ALL(SELECT S# FROM S WHERE SNAME=
7、WANG) AND AGE(SELECT AVG(AGE)FROM SWHERE SEX=F); SELECT SNAME, AGE FROM S WHERE SEX=M AND AGEALL(SELECT AGEFROM SWHERE SEX=F);3.8 对于下面的关系R和S,试求出下列各种联接操作的执行结果: R NATURAL INNER JOIN S R NATURAL RIGHT OUTER JOIN S R RIGHT OUTER JOIN S USING(C) R INNER JOIN S R FULL OUTER JOIN S ON falseRABCSBCDa1b1c1b1
8、c1d1a2b2c2b2c2d2a3b3c3b4c4d4解:ABCDABCDAR.BCS.BDa1b1c1d1a1b1c1d1a1b1c1b1d1a2b2c2d2a2b2c2d2a2b2c2b2d2nullb4c4d4nullnullc4b4d4AR.BR.CS.BS.CDAR.BR.CS.BS.CDa1b1c1b1c1d1a1b1c1nullnullnulla1b1c1b2c2d2a2b2c2nullnullnulla1b1c1b4c4d4a3b3c3nullnullnulla2b2c2b1c1d1nullnullnullb1c1d1a2b2c2b2c2d2nullnullnullb2c2d
9、2a2b2c2b4c4d4nullnullnullb4c4d4a3b3c3b1c1d1a3b3c3b2c2d2a3b3c3b4c4d43.12 试用SQL更新语句表达对3.2题教学数据库中关系S、SC、C、T的更新操作: 往关系C中插一个课程元组(C8,VC+,T6)。 检索所授每门课程平均成绩均大于80分的教师姓名,并把检索到的值送往另一个已存在的表FACULTY(TNAME)。 在SC中删除尚无成绩的选课元组。 把选修LIU老师课程的女同学选课元组全部删去。 把MATHS课不及格的成绩全改为60分。 把低于所有课程总平均成绩的女同学成绩提高5。 在表SC中修改C4课程的成绩,若成绩小于等于
10、70分时提高5,若成绩大于70 分时提高4(用两种方法实现,一种方法是用两个UPDATE语句实现,另一种方法是用带CASE操作的一个UPDATE语句实现)。 在表SC中,当某个成绩低于全部课程的平均成绩时,提高5%。解: INSERT INTO CVALUES(C8,VC+,T6); INSERT INTO FACULTY(TNAME)SELECT DISTINCT TNAMEFROM (SELECT TNAME, C.C#, AVG(GRADE)FROM SC,C,TWHERE SC.C#=C.C# AND C.T#=T.#GROUP BY T#, C.C#)AS RESULT(TNAME,
11、 C#, AVG_GRADE) AS XWHERE 80=ALL(SELECT AVG_GRADEFROM RESULT AS YWHERE Y.TEACHER=X.TEACHER); DELETE FROM SCWHERE SCORE IS NULL; DELETE FROM SCWHERE S# IN(SELECT S# FROM S WHERE SEX=F)AND C# IN(SELECT C# FROM C,T WHERE C.T#=T.# AND TNAME=LIU); UPDATE SCSET SCORE=60WHERE SCORE60AND C# IN(SELECT C# FRO
12、M C WHERE CNAME=MATHS); UPDATE SCSET SCORE=SCORE*1.05WHERE S# IN(SELECT S# FROM S WHERE SEX=F)AND SCORE70;UPDATE SCSET SCORE=SCORE*1.05WHERE C#=C4 AND SCORE70 THEN 1.04ELSE 1.05ENDWHERE C#=C4; UPDATE SC SET SCORE=SCORE*1.05 WHERE SCORE50 AND SEX=M; SELECT EMP.E#, ENAMEFROM EMP, WORKSWHERE EMP.E#=WOR
13、KS.E# AND SALARY1000; SELECT A.E#, A.ENAMEFROM EMP A, WORKS B, WORKS CWHERE A.E#=B.E# AND B.E#=C.E#AND B.C#=C4 AND C.C#=C8; SELECT A.E#, A.ENAMEFROM EMP A, WORKS B, COMP CWHERE A.E#=B.E# AND B.C#=C.C#AND CNAME=联华公司 AND SALARY1000AND SEX=M; SELECT E#, COUNT(C#) AS NUM, SUM(SALARY) AS SUM_SALARYFROM W
14、ORKS GROUP BY E#; SELECT X.E#FROM WORKS XWHERE NOT EXISTS(SELECT *FROM WORKS YWHERE E#=E6AND NOT EXISTS(SELECT *FROM WORKS ZWHERE Z.E#=X.E#AND Z.C#=Y.C#); SELECT A.E#, A.ENAMEFROM EMP A, WORKS B, COMP CWHERE A.E#=B.E# AND B.C#=C.C# AND CNAME=联华公司AND SALARY50); DELETE FROM WORKS WHERE E# IN (SELECT E
15、# FROM EMP WHERE AGE60); DELETE FROM EMP WHERE AGE60;3.14 对第3.13题中的关系建立一个有关女职工信息的视图EMP_WOMAN,属性包括(E#,ENAME,C#,CNAME,SALARY)。然后对视图EMP_WOMAN操作,检索每一位女职工的工资总数。(假设每个职工可在多个公司兼职)解: CREATE VIEW EMP_WOMANAS SELECT A.E#, A.ENAME, C.C#, CNAME, SALARYFROM EMP A, WORKS B, COMP CWHERE A.E#=B.E# AND B.C#=C.C# AND
16、SEX=F;SELECT E#,SUM(SALARY)FROM EMP_WOMAN GROUP BY E#;3.15 对于3.2题的教学数据库中基本表SC,建立一个视图: CREATE VIEW S_SCORE(S#,C_NUM,AVG_SCORE) AS SELECT S#,COUNT(C#),AVG(SCORE) FROM SC GROUP BY S#; 试判断下列查询和更新操作是否允许执行。如允许,写出转换到基本表SC上的相应操作。 SELECT * FROM S_SCORE; SELECT S#,C_NUM FROM S_SCOREWHERE AVG_SCORE80; SELECT S
17、#,AVG_SCORE FROM S_SCOREWHERE C_NUM (SELECT C_NUMFROM S_SCOREWHERE S#=S4); UPDATE S_SCORE SET S#=S3 WHERE S#=S4; DELETE FROM S_SCOREWHERE C_NUM4;答: 允许查询。相应的操作如下: SELECT S#,COUNT(C#) AS C_NUM,AVG(SCORE) AS AVG_SCORE FROM SC GROUP BY S#; 允许查询。相应的操作如下: SELECT S#,COUNT(C#) AS C_NUM FROM SC GROUP BY S#HAVING AVG(SCORE) 80; 允许查询
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1