发布时间 : 星期一 文章数据库原理与应用教程-(第二版)人民邮电出版社习题参考答案更新完毕开始阅读47edbed628ea81c758f57869
PDate DATETIME, SMoney SMALLMONEY );
(2) 掌握书的库存情况,列出当前库存的所有书名、数量、余额(余额=进价*数量,即库存占用的资金)
SELECT BName, BCount, BPrice* BCount AS TOTALCOUNT FROM BookStore
(3) 统计总销售额。
SELECT SUM(SCount * SMoney) AS TOTALMONEY FROM BookSell
(4) 列出每天的销售报表,包括书名、数量和合计金额(每一种书的销售总额)
SELECT BNo, BName , SDate , BCount , SCount * SMoney AS TOTALMONEY FROM BookStore, BookSell
WHERE BookStore. BNo= BookSell. Bno GROUP BY BNo, BName , SDate , BCount
(5) 分析畅销书,即列出当期(从当前起,向前30天)销售数量大于100的书名、数量。
SELECT BName , SCount FROM BookStore, BookSell
WHERE BookStore. BNo= BookSell. BNo AND SCount>100 AND SDate+30<(SELECT MAX(SDate) FROM BookSell)
或:SDate-‘2009-5-1’<30 或: ‘2009-5-30’- SDate <30 或:SDate BETWEEN ‘2009-5-1’ AND ‘2009-5-30’ 说明:日期的表示方法
2009-5-30 20090530 2009/5/30
四、简答题 S(学生信息表) 学号 S# 课程号 C# 学号 S# 学生姓名 SN 课程名称 CN 课程号 C# 成绩 GR 年龄 AGE 所在系 DEPT C(课程信息表) SC(选课信息表)
(1) 创建S表,S#为主键,SN不能为空。
CREATE TABLE S ( S# CHAR(8) PRIMARY KEY,
SN CHAR(8) NOT NULL, AGE INT,
DEPT VARCHAR(20) )
(2) 创建计算机系学生的视图,该视图的属性列由学号、姓名、课程名和任课教师号组成。
CREATE VIEW computer_student(S#, SN, C#,T#) AS
SELECT S.S#, SN, SC.C#, T# FROM S, SC, T
WHERE S.S#= SC.S# AND SC.C#= T.C# AND DEPT=’计算机’
(3) 检索计算机系年龄在20岁以上的学生学号。 SELECT S# FROM S
WHERE AGE>20 AND DEPT=’计算机’
(4) 检索姓王的教师所讲课程的课程号和课程名称。
SELECT C.C#, CN FROM C, T
WHERE C.C#= T.C# AND TN LIKE ‘王%’
(5) 检索张三同学所学课程的成绩,列出SN, C#,GR
SELECT SN, C#, GR FROM S, SC
WHERE S.S#= SC.S# AND SN= ’张三’
(6) 检索选修总收入超过1000元的教师所讲课程的学生姓名、课程号和成绩。
SELECT SN, T.C#, GR FROM T, SC, S
WHERE T.C# =SC.C# AND S.S#= SC.S# AND (SAL+COMM)>1000
(7) 检索没有选修C1课程且选修课程数为两门的学生的姓名和平均成绩,并按平均成绩降序排列。
SELECT SN, AVG (GR) AS AVGSCORE FROM S, SC
WHERE S.S#= SC.S# AND C#<>’C1’ GROUP BY S.S#, SN HAVING COUNT (*)=2
ORDER BY AVG(GR) DESC
(8) 检索选修和张三同学所选课程中任意一门相同的学生姓名,课程名
SELECT SN, CN FROM S, SC, C
WHERE S.S#= SC.S# AND C.C#=SC.C# AND SC.C# IN (SELECT C# FROM S, SC WHERE S.S#= SC.S# AND SN= ’张三’) AND SN<> ’张三’
或:SC.C#=ANY
(9) S1同学选修了C3,将此信息插入SC表中。
INSERT INTO SC(S#, C#) VALUES (‘S1’,’C3’)
(10) 删除S表中没有选修任何课程的学生的记录。
DELETE FROM S
WHERE S# NOT IN (SELECT DISTINCT S# FROM SC) 第4章习题参考答案
一、选择题
1. B 2. B 3. D 4. B 5. C 6. D 7. B 8. D 9. C 二、填空题
1. 超键(或超码) 3. 属性集X的闭包X + 函数依赖集F的闭包F + 5. {AD→C} φ 7. 无损连接 保持函数依赖 9. B→φ B→B B→C B→BC 11. AB 1NF 三、简答题
7. 设有关系模式R(U,F),其中:
U={A,B,C,D,E},F={A→D,E→D,D→B,BC→D,CD→A } ⑴ 求R的候选码。
(2)根据函数依赖关系,确定关系模式R属于第几范式。 (3)将R分解为3NF,并保持无损连接性。 解:
⑴ 由于(CE)+ =ABCDE,C+ =C,E+ =BDE,?R的候选码是CE。 ⑵ 求出最小依赖集F’={A→D,E→D,D→B,BC→D,CD→A } 将R分解的3NF:?={AD,DE,BD,BCD,ACD}
17. 设有关系模式R(U, F),其中:U={E, F, G, H},F={E→G, G→E, F→EG, H→EG, FH→E},求F的最小函数依赖集。 解:
(1)将F中每个函数依赖的右部均变成单属性,可得:
{E→G, G→E, F→E, F→G, H→E, H→G, FH→E}
(2)去掉F中各函数依赖左部多余的属性。对于FH→E,有2种情况:
①由于F+=(FEG),因此H是多余的属性,FH→E可简化为F→E,可得:
{E→G, G→E, F→E, F→G, H→E, H→G, F→E} ②由于H+=(HEG),因此F是多余的属性,FH→E可简化为H→E,可得:
{E→G, G→E, F→E, F→G, H→E, H→G, H→E}
(3)去掉F中冗余的函数依赖:
首先将第(2)步的结果中重复的函数依赖去掉,对于第(2)步的情况①和情况②,都可得:
{E→G, G→E, F→E, F→G, H→E, H→G}
然后分4种情况处理: ①由于F→E可由F→G和G→E推出,因此F→E可去掉;由于H→E可由H→G和G→E推出,因此H→E可去掉。因此:
Fmin1={E→G, G→E, F→G, H→G}
②由于F→G可由F→E和E→G推出,因此F→G可去掉;由于H→G可由H→E和E→G推出,因此H→G可去掉。因此:
Fmin2={E→G, G→E, F→E, H→E}
10. A
2. 正确 完备
4. 平凡的函数依赖 自反性 6. 2NF 3NF BCNF 8. AB BC BD
10. B→C A→D D→C 12. AD 3NF