数据库原理及应用——复习题(3)

数据库原理及应用复习题——问答题
问答题
1、WHERE Age BETWEEN 20 AND 30 子句,查找的 Age 范围是多少?
答案: Age 大于等于 20 并且小于等于 30
2、执行 SELECT … INOT 表名 FROM … 语句时,对表名的要求是什么?
答案: 必须是一个不存在的新表名。
3、(上机题)查询计算机系年龄在 18 ~ 20 之间且性别为“男”的学生的姓名、年龄。
答案: select sname,sage from student where sdept = ’ 计算机系 ’ and sage between 18 and 20 and ssex = ’ 男 ’
4、试说明使用视图的好处
答案: 利用视图可以简化客户端的数据查询语句,使用户能从多角度看待同一数据,可以提高数据的安全性,视图对应数据库三级模式中的外模式,因此提供了一定程度的逻辑独立性。
5、自连接与普通内连接的主要区别是什么?
答案: 自连接中进行连接操作的表在物理上是一张表,而普通内连接进行连接的表在物理上是两张表。
6、假设有下面两个关系模式:
职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码;
部门(部门号,名称,经理名,电话),其中部门号为主码。
用SQL语言定义这两个关系,要求在模式中完成以下完整性条件的定义:
(1)定义每个模式的主码;
(2)定义参照完整性;
(3)定义职工年龄不得超过60岁
答案: (略)
7、设有关系模式 R(W, X, Y, Z) , F={X → Z, WX → Y} ,该关系模式属于第几范式,请说明理由。
答案:
R 是 1NF , R 的候选码为 WX, 因此 Y,Z 是非主属性,又由于存在 X → Z ,因此 F 中存在非主属性对主码的部分函数依赖,因此 R 不是 2NF 。
8、(上机题)用子查询实现,查询计算机系考试成绩最高的学生姓名。
答案: select sname from student s join sc on s.sno = sc.sno where sdept = ’ 计算机系 ’ and grade = (select max(grade) from sc join student s on s.sno = sc.snowhere sdept = ’ 计算机系 ')
9、(上机题) 查询成绩 80 分以上的学生的姓名、课程号和成绩,并按成绩降序排列结果。
答案: select sname,cno,grade from student s join sc on s.sno = sc.sno where grade > 80 order by grade desc
10、(上机题)查询学生的选课情况,要求列出每位学生的选课情况(包括未选课的学生),并列出学生的学号、姓名、课程号和考试成绩。
答案: select s.sno,sname,cno,grade from student s left join sc on s.sno = sc.sno
11、(设计题) 设有关系模式:教师授课(课程号,课程名,学分,授课教师号,教师名,授课时数),其语义为:一门课程(由课程号决定)有确定的课程名和学分,每名教师(由教师号决定)有确定的教师名,每门课程可以由多名教师讲授,每名教师也可以讲授多门课程,每名教师对每门课程有确定的授课时数。
(1) 指出此关系模式的候选码。
(2) 写出该关系模式的极小函数依赖集。
(3) 该关系模式属于第几范式?并简单说明理由
() 若不属于第三范式,请将其规范化为第三范式关系模式,并指出分解后的每个关系模式的主码和外码。
答案:
( 1 )候选码:(课程号,授课教师号)
( 2 )课程号→课程名,课程号→学分,授课教师号→教师名,(课程号,授课教师号)→授课时数
( 3 )属于第一范式。
因为有:课程号→课程名,因此存在部分函数依赖关系:
课程名部分函数依赖于主码,即(课程号,授课教师号)
( )第三范式关系模式:课程( 课程号 ,课程名,学分)教师( 教师号 ,教师名)授课( 课程号,教师号 ,授课时数),课程号为引用课程的外码,教师号为引用教师的外码。

解析:
12、数据库完整性与数据库的安全性有什么区别与联系?
答案:
数据的完整性和安全性是两个不同概念

数据的完整性,防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据
防范对象:不合语义的、不正确的数据
数据的安全性,保护数据库 防止恶意的破坏和非法的存取
防范对象:非法用户和非法操作
13、关系数据库管理系统的完整性机制应具备哪三个方向的功能?
答案:
1.提供定义完整性约束条件的机制
2.提供完整性检查的方法
3.违约处理
14、建立视图,查询学生的学号、姓名、选修的课程名和考试成绩。
答案: Create view v2 As Select s.sno,sname,cname,grade From student s join sc on s.sno = sc.sno Join course c on c.cno = sc.cno
15、(上机题)分别查询信息管理系和计算机系的学生的姓名、性别、修课名称、修课成绩,并要求将这两个查询结果合并成一个结果集,并以系名、姓名、性别、修课名称、修课成绩的顺序显示各列。
答案: select sdept 系名 , sname 姓名 , ssex 性别 , cname 修课名称 , grade 修课成绩 from student s join sc on s.sno=sc.sno join course c on c.cno=sc.cno where sdept = ’ 信息管理系 ’ UNION select sdept , sname, ssex, cname, grade from student s join sc on s.sno=sc.sno join course c on c.cno=sc.cno where sdept = ’ 计算机系 ’
16、(上机题) 列出“数据库基础”课程考试成绩前三名的学生的学号、姓名、所在系和考试成绩
答案: select top 3 s.sno, sname, sdept, grade from Student s join SC on s.Sno = SC.Sno join Course c on c.Cno = SC.Cno where cname = ’ 数据库基础 ’ order by grade desc
17、修改视图定义,使其查询每个学生的学号、总学分以及总的选课门数。
答案: Alter view v As Select sno,sum(credit) as total_credit,count() as total_cno From sc join course c on c.cno = sc.cno Group by sno
18、在 Student 表的 Sname 列上建立一个唯一的非聚集索引,索引名为: Idx_Sname 。
答案: Create unique index Idx_Sname on student(Sname)
19、在建立聚集索引时,数据库管理系统首先要将数据按聚集索引列进行物理排序。对吗?
答案: 对。
20、在关系系统中,当操作违反实体完整性、参照完整性和用户定义完整性约束条件时,如何分别进行处理?
答案:
违反实体完整性时、用户定义完整性约束条件时,系统采取拒绝本次操作。
违反参照完整性约束条件时,情况相对复杂,可以从参照对象与被参照对象两个方面进行考虑,如参照下规则:
参照表:
(1)插入元组:拒绝
(2)修改外码值:拒绝
被参照表:
(1)删除元组:拒绝、级联式删除或外码设为空
(2)修改主码值:拒绝、级联式修改或外码值设为空
21、外连接与内连接的主要区别是什么?
答案: 进行外连接的两个表中,可以有一张表不满足连接条件,而进行内连接的两个表必须都满足连接条件。
22、索引的作用是什么?
答案: 索引可以加快数据的查询效率。
23、数据库设计分为哪几个阶段?每个阶段的主要工作是什么
答案:
24、利用定义的视图查询计算机系选课门数超过 3 门的学生的姓名和选课门数。
答案: Select sname,total from v3 join student s on s.sno = v3.sno Where sdept = ‘ 计 算机系 ’ and total >= 3
25、利用定义的视图,查询考试成绩大于等于 90 分的学生的姓名、课程名和成绩。
答案: Select sname,cname,grade From v2 where grade >= 90
26、(上机题)统计每门课程的选课人数和考试最高分。
答案: select cno, count(
),max(grade) from sc group by cno
27、对统计结果的筛选应该使用哪个子句完成?
答案:
HAVING 子句
28、(上机题)用子查询实现,查询“ C001 ”课程的考试成绩高于“ C001 ”课程的平均成绩的学生的学号和“ C001 ”课程成绩。
答案: select sno,grade from sc where cno = ’ C001’ And grade > (select avg(grade) from sc where cno = ’ C001’)
29、什么叫关系完备性?
答案:
一种语言如果具有关系代数的表达能力,则称具有完备表达能力,简称关系完备性。
30、相关子查询与嵌套子查询在执行方面的主要区别是什么?
答案: 相关子查询的执行过程是先外后内,而嵌套子查询的执行过程是先内后外。而且相关子查询中必须有与外层查询的关联,而嵌套子查询中,内、外层查询之间没有关联关系。
31、(上机题)删除 VB 考试成绩最低的学生的 VB 修课记录。
答案: delete from sc where grade = ( select min(grade) from sc join course c on c.cno = sc.cno where cname = ‘vb’) and cno in( select cno from course where cname = ‘vb’)
32、(上机题)查询计算机系没有选课的学生,列出学生姓名。
答案: select sname from student s left join sc on s.sno = sc.sno Where sdept = ’ 计算机系 ’ and sc.sno is null
33、在 Student 表的 Sdept 列上建立一个按降序排序的非聚集索引,索引名为: Idx_Sdept 。
答案: Create index Idx_Sdept on student(Sdept DESC)
34、(上机题)用子查询实现,查询选了“ C001 ”课程的学生姓名和所在系。
答案: select sname,sdept from student where sno in( select sno from sc where cno = ’ C0 01’)
35、(上机题)查询“ C001 ” 号课程的最高分。
答案:
select max(grade) from sc where cno = ‘C001’
36、(上机题)将 “ C 001 ” 课程的考试成绩加 10 分。
答案: update sc set grade = grade + 10 where cno = ’ C001’
37、将给定的 E-R 图转换为符合 3NF 的关系模式,并指出每个关系模式的主码和外码。

答案:
下列各关系模式中用下划线标识主码。
商店( 商店编号 ,商店名,联系电话)∈ 3NF
商品( 商品编号 ,商品名称,库存量,商品分类)∈ 3NF
厂家( 厂家编号 ,联系地址,联系电话)∈ 3NF
订购( 商店编号,厂家编号,商品编号,订购日期 ,订购数量)∈ 3NF,商店编号为引用商店关系模式的外码,厂家编号为引用厂家关系模式的外码,商品编号为引用商品关系模式的外码。
38、建立视图,统计每个学生的选课门数,列出学生学号和选课门数。
答案: Create view v3 As Select sno,count(*) as total From sc group by sno
39、第一范式、第二范式和第三范式关系模式的定义分别是什么?
答案:
1NF:关系模式的每个属性都是不可再分的原子属性;
2NF:当一个关系属于1NF,且不存在非主属性对主码的部分函数依赖,则该关系属于2NF;
3NF:当一个关系属于2NF,且不存在非主属性对主码的传递函数依赖,则该关系属于3NF

40、(上机题)用子查询实现,查询年龄最大的男生的姓名和年龄。
答案: select sname,sage from student Where sage = (select max(sage) from student and ssex = ’ 男 ') and ssex = ’ 男 ’
41、(上机题)查询计算机系男生修了“数据库基础”的学生的姓名、性别和成绩。
答案: select sname,ssex,grade from student s join sc on s.sno = sc.sno join course c on c.cno = sc.cno where sdept = ’ 计算机系 ’ and ssex = ’ 男 ’ and cname = ’ 数据库基础 ’
42、在聚合函数中,哪个函数在统计时不考虑 NULL
答案: COUNT()
43、(上机题)查询选课门数超过 2 门的学生的学号、平均成绩和选课门数。
答案: select sno, avg(grade), count(
) from sc having count() > 2
44、(上机题)查询学生选课表中的全部数据。
答案: select * from SC
45、(设计题)设有关系模式:学生(学号,姓名,所在系,班号,班主任,系主任),
其语义为:一个学生只在一个系的一个班学习,一个系只有一个系主任,一个班只有一名班主任,一个系可以有多个班。
(1) 请指出此关系模式的候选码。
(2) 写出该关系模式的极小函数依赖集。
(3) 该关系模式属于第几范式?并简单说明理由。
() 若不是第三范式的,请将其规范化为第三范式关系模式,并指出分解后的每个关系模式的主码和外码。
答案:
( 1 )候选码:学号
( 2 )学号→姓名,学号→所在系,学号→班号,班号→班主任,所在系→系主任
( 3 )第二范式,因为有:学号→班号,班号→班主任,因此存在传递函数依赖:学号班主任
( )第三范式关系模式:
学生( 学号 ,姓名,所在系,班号),班号为引用班的外码,所在系为引用系的外码。
班( 班号 ,班主任)
系( 系名 ,系主任)
46、(上机题)对于下列关系模式:
学生(学号,姓名,年龄,性别,家庭住址,班级号)
班级(班级号,班级名,班主任,班长)
使用Grant语句完成下列授权功能:
(1)授予用户U1对两个表的所有权限,并可给其他用户授权;
(2)授予用户U2对学生表具有查看权限,对家庭住址具有更新权限;
(3)将对班级查看权限授予所有用户;
()将对学生表的查询、更新权限授予角色R;
(5)将角色R1授予用户U1,并且U1可以继续授权给其他角色。
答案: 略
47、(上机题)查询计算机系的学生的姓名、年龄。
答案: select sname,sage from student where sdept = ’ 计算机系 ’
48、在使用 UNION 合并多个查询语句的结果时,对各个查询语句的要求是什么?
答案: 各个查询语句的列个数必须相同,对应列的语义相同,类型兼容。
49、(上机题)删除信息管理系考试成绩小于 50 分的学生的该门课程的修课纪录,分别用子查询和多表连接形式实现。
答案: delete from sc from sc join student s on s.sno=sc.sno where sdept = ’ 信息管理系 ’ and grade < 50;delete from sc where sno in ( select sno from student where sdept = ’ 信息管理系 ’ ) and grade < 50
50、(设计题)设有关系模式:学生修课(学号,姓名,所在系,性别,课程号,课程名,学分,成绩)。
设一个学生可以选多门课程,一门课程可以被多名学生选。一个学生有唯一的所在系,每门课程有唯一的课程名和学分。每个学生对每门课程有唯一的成绩。
(1) 请指出此关系模式的候选码。
(2) 写出该关系模式的极小函数依赖集。
(3) 该关系模式属于第几范式?并简单说明理由。
() 若不是第三范式的,请将其规范化为第三范式关系模式,并指出分解后的每个关系模式的主码和外码。
答案:
( 1 )候选码:(学号,课程号)
( 2 )学号→姓名,学号→所在系,学号→性别,课程号→课程名,课程号→学分, (学号,课程号)→成绩
( 3 )属于第一范式,因为存在部分函数依赖:学号→姓名。
( )第三范式关系模式:
学生( 学号 ,姓名,所在系,性别),
课程( 课程号 ,课程名,学分),
考试( 学号,课程号 ,成绩),
学号为引用学生的外码,课程号为引用课程的外码。
51、TOP 子句的作用是什么?
答案: 在查询结果产生后,提取结果的前若干行数据。
52、(上机题)查询选了“ C 002 ” 课程的学生的姓名和所在系。
答案: select sname,sdept from student s join sc on s.sno = sc.sno where cno = ‘C002’
53、删除在 Sname 列上建立的 Idx_Sname 索引。
答案: drop index Idx_Sname on Student
54、利用(1)~()定义的视图查询选课门数超过 3 门的学生的学号和选课门数。
答案: Select * from v3 where total >= 3
28、(上机题)统计每个学生的选课门数和考试总成绩,并按选课门数升序显示结果。
答案: select sno,count(
), sum(grade) from sc group by sno order by count(*) asc
55、(上机题)查询成绩在 70 ~ 80 分之间的学生的学号、课程号和成绩。
答案: select sno,cno,grade from sc on where grade between 70 and 80
56、适合建立索引的列是什么?
答案: ● 包含大量非重复值的列。● 在 WHERE 子句中经常用于进行 BETWEEN AND 、 > 、 >= 、 < 和 <= 等操作的列。● 经常被用作连接操作的列。● ORDER BY 或 GROUP BY 子句中涉及的列。
57、设有关系模式 R(A, B, C, D) , F={D → A, D → B}
( 1 )求 D +;
(2 )求 R 的全部候选码。
答案:
( 1 ) D + =DAB;
( 2 )因为 D 是 L 类属性,因此 D 一定出现在 R 的任何候选码中;
因为 C 是 N 类属性,因此 C一定出现在 R 的任何候选码中;(CD) + = CDAB = R 的全部属性,因此 R 的唯一候选码是 CD 。

解析:
58、(上机题)用子查询实现,查询通信工程系成绩 80 分以上的学生学号和姓名。
答案: select sno,sname from student where sno in( select sno from sc where grade > 80) and sdept = ’ 通信工程系 ’
59、在排序子句中,排序依据列的前后顺序是否重要? ORDER BY C1,C2 子句对数据的排序顺序是什么?
答案: 重要,系统会按列C1升序排序,对于C1值相同的元组,按C2列升序排序。
60、(上机题)统计每个系的学生人数。
答案: select sdept,count(*) from student group by sdept
61、(上机题)查询 VB 考试成绩最低的学生的姓名、所在系和 VB 成绩。
答案: select top 1 with ties sname,sdept,grade from student s join sc on s.sno = c.sno join course c on c.cno = sc.cno where cname = ‘VB’ order by grade asc
62、(上机题)查询计算机系学生的最大年龄和最小年龄。
答案: select max(sage) as max_age, min(sage) as min_age from student where sdept = ’ 计算机系 ’
63、设有关系模式 R(A, B, C, D) , F = {A → C, C → A, B → AC, D → AC}
( 1 )求 B + , (AD) + ;
( 2 )求 R 的全部候选码,判断 R 属于第几范式;
( 3 )求 F 的极小函数依赖集 F min
答案:
(1) B + = BAC
(AD) + = ADC
(2) 由于 B 、 D 是 L 类属性,因此 B 、 D 会在任何候选码中;
(BD) + = BDAC = R 的全部属性,因此 R 的候选码是 BD 。
R 是第 1 范式,因为存在部分函数依赖:
( 3 )
1) 将所有函数依赖的右边改为单个属性,得到: B → AC,
D → AC
F1 = { A → C, C → A, B → A, B → C, D → A, D → C }
2 )去掉函数依赖左部的多余属性:
该关系模式的全部函数依赖集左部均为一个属性,因此不存在左部有多余属性的情况。
3 ) 去掉多余的函数依赖。
去掉 A → C ,得到 F2 = { C → A, B → A, B → C, D → A, D → C } A+ F2 = AC ,包含 C ,因此为多余函数依赖,应去掉;
去掉 C→A ,得到 F3 = { B → A, B → C, D → A, D → C } C+ F3 = C ,不包含 A ,因此 C→A 不是多余函数依赖;去掉 B→A ,得到 F = { C→A, B → C, D → A, D → C } B+ F = BCA ,包含 A ,因此 B→A 是多余函数依赖,应去掉;去掉 B→C ,得到 F5 = { C→A, D → A, D → C } B+ F5 = B ,不包含 C ,因此 B→C 不是多余函数依赖;去掉 D→A ,得到 F6 = { C→A, B → C, D → C } D+ F5 = DCA ,不包含 A ,因此 D→A 是多余函数依赖,应去掉;去掉 D→C ,得到 F7 = { C→A, B → C } D+ F5 = D ,不包含 C ,因此 D→C 不是多余函数依赖。 最终 F min = { C→A, B → C, D → C }

64、(上机题) 查询哪些课程没有人选,要求列出课程号和课程名。
答案: select c.cno,cname from course c left join sc on c.cno = sc.cno where sc.cno is null
65、(上机题)查询有考试成绩的所有学生的姓名、修课名称及考试成绩,要求将查询结果放在一张新的永久表中,假设新表名为 new_sc 。
答案: select sname, cname, grade into new_sc from student s join sc on s.sno = sc.sno join course c on c.cno = sc.cno where grade is not null
66、试说明哪类视图可实现更新数据的操作,哪类视图不可实现更新数据的操作。
答案: 一般只涉及到一张表的行列子集,且不含分组、统计计算等操作的视图是可更新数据的,其他情况一般都不能实现数据的更新操作。
67、聚集索引一定是唯一性索引,对吗?反之呢?
答案: 不对。反之也不对。
68、(上机题)删除修课成绩小于 50 分的学生的选课记录。
答案: delete from sc where grade < 50
69、利用定义的视图查询年龄大于等于 20 岁的学生中,修课总学分超过 10 分的学生的姓名、年龄、所在系和修课总学分。
答案: Select sname,sage,sdept,total_credit From v join student s on s.sno = v.sno Where sage >= 20 and total_credit >= 10
70、在 Course 表上为 Cname 列建立一个非聚集索引,索引名为: Idx_Cname
答案: Create index Idx_Cname on Course(Cname)
71、建立视图,查询学生的学号、姓名、所在系、课程号、课程名、课程学分。
答案: Create view v1 As Select s.sno,sname,sdept,c.cno,cname,credit From student s join sc on s.sno = sc.sno Join course c on c.cno = sc.cno
72、什么是部分函数依赖?什么是传递函数依赖?请举例说明。
答案:
部分函数依赖:在关系模式R(U)中,如果X→Y,并且存在X的一个真子集X0,使得X0→Y,则称Y对X部分函数依赖。
在关系模式R(U)中,设X,Y,Z是U的不同的属性子集,如果X→Y、Y→Z,且没有XY,没有Y→X,(X∪Y)∩Z=Φ,则称Z传递函数依赖(transitive functional dependency) 于X。
部分函数依赖的例子:学生课程(学号,姓名,年龄,课程号,课程名,学分)
该关系的主码是:(学号,课程号),故有:(学号,课程号)→课程名,根据语义有:课程号→课程名,故存在:课程名部分函数依赖于(学号,课程号)
传递函数依赖的例子:学生(学号,姓名,出生日期,年龄)
该关系主码是学号,故有:学号→出生日期,学号→年龄,根据语义,显然有:出生日期→年龄,故存在年龄对学号的传递函数依赖。

73、索引分为哪几种类型?分别是什么?它们的主要区别是什么?
答案: 分为聚集索引和非聚集索引两种。聚集索引会对数据进行物理排序,非聚集索引不对数据进行物理排序。
74、WHERE Sdept NOT IN (‘CS’,’IS’,’MA’) ,查找的数据是什么?
答案: 查找 ‘CS’,’IS’,’MA’ 三个系之外的其他系
75、在 LIKE 运算符中“ % ”的作用是什么?
答案: 匹配 0 个或多个字符
76、(上机题)将计算机系所有选修了“计算机文化学”课程的学生成绩加 10 分,分别用子查询和多表连接形式实现。
答案: update sc set grade = grade + 10 where sno in( select sno from student where sdept = ’ 计算机系 ') and cno in(select cno from course; update sc set grade = grade + 10 from sc join student s on sc.sno = s.sno join course c on c.cno = sc.cno where sdept = ’ 计算机系 ’ and canem = ’ 计算机文化学 'where cname = ’ 计算机文化学 ')
77、()建立视图,统计每个学生的修课总学分,列出学生学号和总学分(说明:考试成绩大于等于 60 才可获得此门课程的学分)。
答案: Create view v As Select sno,sum(credit) as total_credit From sno join course c on c.cno = sc.cno Where grade >= 60 Group by sno
78、 将给定的 E-R 图转换为符合 3NF 的关系模式,并指出每个关系模式的主码和外码。

答案:
下列各关系模式中用下划线标识主码。
图书( 书号 ,书名,出版日期,作者名)
读者( 读者号 ,读者名,联系电话,所在单位)
借阅( 书号,读者号,借书日期 ,还书日期),书号为引用图书关系模式的外码,读者号为引用读者关系模式的外码。
79、第三范式的关系模式是否一定不包含部分函数依赖关系?
答案:
不一定,只是不包含非主属性对主码的部分函数依赖关系,但可能存在主属性对于主码的部分函数依赖关系等。

80、关系规范化中的操作异常有哪些?它是由什么引起的?解决的办法是什么?
答案:
关系规范化中的操作异常有插入异常、更新异常和删除异常。
这些异常是由于关系中存在不好的函数依赖关系引起的。
消除不良函数依赖的办法是进行模式分解,即将一个关系模式分解为多个关系模式。

81、什么是数据库模式?有哪些特点?
答案:
模式是数据库中全体数据的逻辑结构和特征的描述,它仅仅涉及型的描述,不涉及具体的值。
有以下特点:
1.数据库逻辑结构和特征的描述
2.是型的描述,不涉及具体值
3.反映的是数据的结构及其联系
4.模式是相对稳定的

82、将给定的 E-R 图转换为符合 3NF 的关系模式,并指出每个关系模式的主码和外码。

答案:
下列各关系模式中用下划线标识主码。
社团( 社团号 ,社团名,电话,性质)∈ 3NF
学生( 学号,姓名,性别,专业,社团号,参加日期)∈ 3NF,社团号为引用社团的外码。
83、(上机题) 创建一个新表,表名为 test_t ,其结构为:( COL1, COL 2, COL 3 ),其中:
COL1 :整型,允许空值。
COL2 :字符型,长度为 10 ,不允许空值。
COL3 :字符型,长度为 10 ,允许空值。
试写出按行插入如下数据的语句(空白处表示空值)。
COL1 COL2 COL3
B1
1 B2 C2
2 B3

答案:
create table test_t (
COL1 int,
COL2 char(10) not null,
COL3 char(10) )
insert into test_t values(NULL, ‘B1’, NULL)
insert into test_t values(1, ‘B2’, ‘C2’)
insert into test_t(COL1, COL2) values(2, ‘B3’)

解析:
84、利用定义的视图查询修课总学分超过 10 分的学生的学号、姓名、所在系和修课总学分
答案: Select v.sno,sname,sdept,total_credit From v join student s on s.sno = v.sno Where total_credit >= 10
85、(上机题)查询总成绩超过 200 分的学生,要求列出学号和总成绩。
答案: select sno,sum(grade) from sc group by sno
86、在 SC 表上为 Sno 和 Cno 建立一个组合的非聚集索引,索引名为: Idx_SnoCno 。
答案: Create index Idx_SnoCno on SC(Sno,Cno)
87、使用视图可以加快数据的查询速度,这句话对吗?为什么?
答案: 不对,因为通过视图查询数据时,比直接针对基本表查询数据多了一个转换过程,即从外模式到模式的转换。
88、设某工厂生产若干产品,每种产品由若干零件组成,同一种零件可用在不同的产品上。零件由不同的原材料制成,不同的零件所用的原材料可以相同。零件按所属产品的不同被分别存放在不同的仓库中,一个仓库可以存放多种不同的零件。原材料按类别存放在若干仓库中,一个仓库也可以存放不同类别的材料。画出该工厂的 E-R 图(注:只画出实体和联系即可,不用标识属性)。
答案:
① 确定实体。本系统共有四个实体:产品、零件、材料、仓库。
因为只描述的是一个工厂的情况,因此不需要将工厂设为实体。
② 确定实体间的联系。
⏹ 产品与零件:多对多联系,可将联系命名为“组成”。
⏹ 零件与材料:多对多联系,可将联系命名为“制成”。
⏹ 零件与仓库:多对多联系,可将联系命名为“存放”。
⏹ 材料与仓库:多对多联系,可将联系命名为“存放”。
③ 绘制 E-R 图

89、创建满足下述要求的游标,并查看游标的执行结果。
(1) 列出 VB 考试成绩最高的前 2 名和最后 1 名学生的学号、姓名、所在系和 VB 成绩。
(2) 列出每个系年龄最大的名学生的姓名和年龄,将结果按年龄降序排序。
答案:
(1)
declare @sno char ( 10 ), @sname char ( 10 ), @dept char ( 1 ), @grade char ( )
declare c1 SCROLL cursor for
select s . sno , sname , sdept , grade
from student s join sc on s . sno = sc . sno
join course c on c . cno = sc . cno
where cname = ‘vb’
order by grade desc
open c1
print ’ 学号 姓名 所在系 VB 成绩 ’
print ‘---------------------------------------’
fetch next from c1 into @sno , @sname , @dept , @grade
if @@FETCH_STATUS = 0
print @sno + @sname + @dept + @grade
fetch next from c1 into @sno , @sname , @dept , @grade
if @@FETCH_STATUS = 0
print @sno + @sname + @dept + @grade
fetch last from c1 into @sno , @sname , @dept , @grade
if @@FETCH_STATUS = 0
print @sno + @sname + @dept + @grade
close c1
deallocate c1
(2)
declare @sname char ( 10 ), @age char ( ), @dept char ( 20 )
declare c1 cursor for select distinct sdept from student
open c1
fetch next from c1 into @dept
while @@FETCH_STATUS = 0
begin
print @dept
declare c2 cursor for
select top 2 with ties sname , sage from student where sdept = @dept order by sage desc
open c2
fetch next from c2 into @sname , @age
if @@FETCH_STATUS = 0 print @sname + @age
fetch next from c2 into @sname , @age
if @@FETCH_STATUS = 0 print @sname + @age
print ‘’
close c2
deallocate c2
fetch next from c1 into @dept
end
close c1
deallocate c1
90、 创建满足下述要求的存储过程,并查看存储过程的执行结果。
(1) 查询每个学生的修课总学分,要求列出学生学号及总学分。
(2) 查询学生的学号、姓名、修的课程号、课程名、课程学分,将学生所在系作为输入参数。
(3) 查询指定系的男生人数,其中系为输入参数,人数为输出参数。
(4) 删除指定学生的修课记录,其中学号为输入参数。
(5) 修改指定课程的开课学期。输入参数为:课程号和修改后的开课学期。
答案:
(1)
create proc p1
begin
select sno , SUM ( credit ) as 总学分
from SC join Course c on c . Cno = SC . Cno
group by sno;
end
(2)
create proc p2(in dept varchar ( 20 ))
begin
select s . sno , sname , c . cno , cname , credit
from Student s join SC on s . Sno = SC . Sno
join Course c on c . Cno = SC . Cno
where Sdept = dept;
end
(3)
create proc p3(in dept varchar ( 20 ), out rs int )
begin
select COUNT (*) into rs from Student
where Sdept = dept and Ssex = ’ 男 ';
end
(4)
create proc p(in sno char ( 7 ))
begin
delete from SC where Sno = sno;
end
(5)
create proc p5(in cno char ( 6 ), in x tinyint)
begin
update Course set Semester = @x where Cno = @cno;
end
91、 创建满足下述要求的触发器(前触发器、后触发器均可),并验证触发器执行情况。
(1) 限制学生的年龄在 15~5 之间。
(2) 限制学生所在系的取值范围为 { 计算机系,信息管理系,数学系,通信工程系 }
(3) 限制每个学期开设的课程总学分在 20~30 范围内。
(4) 限制每个学生每学期选课门数不能超过 6 门(设只针对插入操作)

答案:
(1)
create trigger tri1
after insert ,update on student
as
if exists( select * from new where sage not between 15 and 5 )
rollback
(2)
create trigger tri2
after insert , update on student
as
if exists( select * from student where sdept not in
( ’ 计算机系 ’ , ’ 信息管理系 ’ , ’ 数学系 ’ , ’ 通信工程系 ’ ))
Rollback
(3)
create trigger tri3
after insert , update on course
as
if exists( select sum ( credit ) from course
where semester in ( select semester from inserted )
having sum ( credit ) not between 20 and 30 )
Rollback
(4)
create trigger tri
after insert on sc
as
if exists( select * from sc join course c on sc . cno = c . cno
where sno in ( select sno from new)
group by sno , semester
having count (*) > 6 )
rollback

92、设要建立描述顾客在商店的购物情况的数据库应用系统,该系统有如下要求:一个商店可有多名顾客购物,一个顾客可到多个商店购物,顾客每次购物有一个购物金额和购物日期。规定每个顾客每天在每个商店最多有一次购物,每次购物可购买多种商品。需要描述的“商店”信息包括:商店编号、商店名、地址、联系电话;需要描述的顾客信息包括:顾客号、姓名、住址、身份证号、性别。
请画出描述该应用系统的 E-R 图,并注明各实体的属性、标识属性以及联系的种类。
答案:

93、
设有如下所示的关系 S(S#,SNAME,AGE,SEX) 、 C(C#,CNAME,TEACHER) 和 SC(S#,C#,GRADE) ,试用关系代数表达式表示下列查询语句:
__(1) 检索“程军”老师所授课程的课程号 (C#) 和课程名 (CNAME) 。
__(2) 检索年龄大于 21 的男学生学号 (S#) 和姓名 (SNAME) 。
__ (3) 检索至少选修“程军”老师所授全部课程的学生姓名 (SNAME) 。
__(4) 检索”李强”同学不学课程的课程号 (C#) 。
__(5) 检索至少选修两门课程的学生学号 (S#) 。
__ (6) 检索全部学生都选修的课程的课程号 (C#) 和课程名 (CNAME) 。
__ (7) 检索选修课程包含“程军”老师所授课程之一的学生学号 (S#) 。
__(8) 检索选修课程号为 k1 和 k5 的学生学号 (S#) 。
__(9) 检索选修全部课程的学生姓名 (SNAME) 。
__(10) 检索选修课程包含学号为 2 的学生所修课程的学生学号 (S#) 。
__(11) 检索选修课程名为“ C 语言”的学生学号 (S#) 和姓名 (SNAME) 。

答案:
∏ C#,CNAME ( σ TEACHER= ‘程军’ ©)
∏ S#,SNAME ( σ AGE>21 ∧ SEX= ”男” (s))
∏ SNAME {s∞[ ∏ S#,C# ( sc )÷∏ C# ( σ TEACHER= ‘程军 ’ ©)]}
∏ C# ©- ∏ C# ( σ SNAME= ‘李强’ (S) ∞ SC)
∏ S# ( σ [1]=[] ∧ [2] ≠ [5] (SC × SC))
∏ C#,CNAME (C∞( ∏ S#,C# (sc) ÷∏ S# (S)))
∏ S# (SC ∞ ∏ C# ( σ TEACHER= ‘程军’ ©))
∏ S#,C# ( sc )÷∏ C# ( σ C#= ’ k1 ’∨ C#= ’ k5 ’ ©)
∏ SNAME {s ∞[ ∏ S#,C# ( sc )÷∏ C# ©]}
∏ S#,C# ( sc )÷∏ C# ( σ S#= ’ 2 ’ (SC))
∏ S#,SNAME {s ∞ [ ∏ S# (SC ∞ σ CNAME= ‘ C 语言’ ©)]}

94、设有关系模式 R(A, B, C, D) , F = {A → C, C → A, B → AC, D → AC}
( 1 )求 B + , (AD) + ;
( 2 )求 R 的全部候选码,判断 R 属于第几范式;
( 3 )求 F 的极小函数依赖集 F min
答案:
(1) B + = BAC
(AD) + = ADC
(2) 由于 B 、 D 是 L 类属性,因此 B 、 D 会在任何候选码中;
(BD) + = BDAC = R 的全部属性,因此 R 的候选码是 BD 。
R 是第 1 范式,因为存在部分函数依赖:
( 3 )
1) 将所有函数依赖的右边改为单个属性,得到: B → AC,
D → AC
F1 = { A → C, C → A, B → A, B → C, D → A, D → C }
2 )去掉函数依赖左部的多余属性:
该关系模式的全部函数依赖集左部均为一个属性,因此不存在左部有多余属性的情况。
3 ) 去掉多余的函数依赖。
去掉 A → C ,得到 F2 = { C → A, B → A, B → C, D → A, D → C } A+ F2 = A ,不包含 C ,因此A → C不是多余函数依赖,应保留;
去掉 C→A ,得到 F3 = { A → C,B → A, B → C, D → A, D → C } C+ F3 = C ,不包含 A ,因此 C→A 不是多余函数依赖,应保留;
去掉 B→A ,得到 F4= { A → C, C→A, B → C, D → A, D → C } B+ F4 = BCA ,包含 A ,因此 B→A 是多余函数依赖,应去掉;
去掉 B→C ,得到 F5 = { A → C, C→A, D → A, D → C } B+ F5 = B ,不包含 C ,因此 B→C 不是多余函数依赖;
去掉 D→A ,得到 F6 = { A → C,C→A, B → C, D → C } D+ F5 = DCA ,包含 A ,因此 D→A 是多余函数依赖,应去掉;
去掉 D→C ,得到 F7 = { A → C,C→A, B → C } D+ F5 = D ,不包含 C ,因此 D→C 不是多余函数依赖。
最终 F min = { A → C, C→A, B → C, D → C }

你可能感兴趣的:(数据库,数据库复习题,mysql,sql,数据库)