95001 95002 95002 3 2 3 88 90 80
根据以上所定义的三张基表写出相应的SQL语句: (1)查询年龄在20以下的女生的姓名、系别、年龄。 (2)查询每个学生的姓名及其选修课程的课程名。
(3)创建一个视图,包括每个系的学生所选的每门课程的平均成绩,而且只选取平均成绩为80分以上的。
(4)查询学号为95013的学生的各科成绩,如果没有这个学生的成绩,就显示“此学生无成绩”。
期末测试题(一)参考答案
一、 填空题(每空1分,共10分)
1.数据库管理系统(DBMS) 2.关系(二维表) 3.(A,C) 4.图状结构 5.数据 6.B树 7.隔离性 8.DISTINCT 9.拥有者 10.DML
二、选择题(每小题1分,共20分)
1~5 DCAAC 6~10 ACABB 11~15 CDCDA 16~20 DBABB
三. 名词解释(每小题3分,共15分)
1.数据库:数据库就是存放数据的仓库,是将数据按一定的数据模型组织、描述和存储,能够自动进行查询和修改的数据集合。
2.候选关键字:如果在一个关系中,存在多个属性(或属性组合)都能用来唯一标识该关系中的元组,这些属性(或属性组合)都称为该关系的候选关键字或候选码。
3.视图:视图(View)是关系数据库系统提供给用户以多种角度观察数据库中数据的重要机制,视图是从一个或几个表导出来的表,不是真实存在的基本表而是一张虚表,视图所对应的数据并不实际的以视图结构存储在数据库中,而是存储在视图所引用的表中。
4.游标:游标是处理数据的一种方法,它允许应用程序对查询语句SELECT返回的结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作。
5.事务:事务由一系列的数据操作组成,是数据库应用程序的基本逻辑单元,用来保证数据的一致性。
四、简答题(每小题5分,共25分)
1.创建索引的必要性和作用是什么?
答:数据库的索引就类似于书籍的目录,如果想快速查找而不是逐页查找指定的内容,可以通过目录中章节的页号找到其对应的内容。类似的,索引通过记录表中的关键值指向表中的记录,这样数据库引擎就不用扫描整个表而定位到相关的记录。相反,如果没有索引,则会导致SQL Server搜索表中的所有记录,以获取匹配结果。
2.简述主键约束和唯一性约束的异、同点。
5
答:主键约束在表中定义一个主键值,这是唯一确定表中每一行数据的标识符。该约束强制实体完整性。一个表中最多只能有一个主键,且主键列不允许取空值。
UNIQUE(唯一性)约束指定表中某一个列或多个列不能有相同的两行或两行以上的数据存在。这种约束通过实现唯一性索引来强制实体完整性。当表中已经有了一个主键约束时,如果需要在其他列上实现实体完整性,又因为表中不能有两个或两个以上的主键约束,所以只能通过创建UNIQUE约束来实现。一般的,把UNIQUE约束称为候选的主键约束。 3.简述T-SQL语言的特点。
答:(1)综合统一:T-SQL语言集数据定义语言、数据操纵语言、数据控制语言和附加语言元素为一体。
(2)两种使用方式,统一的语法结构:即联机交互式和嵌入高级语言的使用方式。 (3)高度非过程化。
(4)类似于人的思维习惯,容易理解和掌握。 4.简述存储过程的优点。
答:存储过程最主要的特色是当写完一个存储过程后即被翻译成可执行码存储在系统表内,当作是数据库的对象之一,一般用户只要执行存储过程,并且提供存储过程所需要的参数就可以得到所要的结果而不必再去编辑T-SQL命令。 5.简述死锁及其解决办法。
答:产生死锁的情况一般包括以下两种:
第一种情况,当两个事务分别锁定了两个单独的对象,这时每一个事务都要求在另外一个事务锁定的对象上获得一个锁,因此每一个事务都必须等待另外一个事务释放占有的锁,这时,就发生了死锁。这种死锁是最典型的死锁形式。
第二种情况,当在一个数据库中时,有若干个长时间运行的事务执行并行的操作,当查询分析器处理一种非常复杂的查询例如连接查询时,那么由于不能控制处理的顺序,有可能发生死锁现象。
在数据库中解决死锁常用的方法有:
(1)要求每个事务一次就将要使用的数据全部加锁,否则就不能继续执行。 (2)允许死锁发生,系统来用某些方式诊断当前系统中是否有死锁发生。
五、综合题(每小题10分,共30分)
1.E-R图: 学分 姓名 学号 课程名
M N 学习 课程 学生 课程号 成绩 性别 年龄
关系模式:
学生(学号,姓名,性别,年龄)
6
课程(课程号,课程名,学分) 学习(学号,课程号,成绩)
2.(1)关系模式R的主关键字是(运动员编号,项目号)。
(2)R最高属于第一范式。因为存在着姓名,性别,班级和项目名对主关键字(运动员编号,项目号)的部分函数依赖,没有达到2NF。
(3)首先分解为2NF:R1(运动员编号,姓名,性别,班级,班主任),R2(项目号,项目名),R3(运动员编号,项目号,成绩)。因为R1存在班主任对运动员编号的传递函数依赖,所以没有达到3NF,再分解为3NF:R1分解为R1(运动员编号,姓名,性别,班级)和R4(班级,班主任) 3.(1)select 姓名,所在系,年龄from Student
where 年龄<20 and 性别=‘女’
(2)select Student.姓名,C.课程名 from Student,SC,Course Where Student.学号=SC.学号 and SC.课程号=Course.课程号 (3)create view view1 as
select 所在系,课程号,avg(成绩)as 平均成绩 from student,course where Student.学号=SC.学号 group by 所在系,课程号 having(avg(成绩)>=80)
(4)if(select count(*)from sc where sno=‘95013’)>0 Select*from sc where sno=‘95013’
else
print‘此学生无成绩’
7