B、SELECT 姓名 FROM 课程表 WHERE学生表.学号=课程表.学号 AND 课程表.成绩>90 C、SELECT 姓名 FROM 学生表,课程表 WHERE 学生表.学号=课程表.学号 OR 课程表.成绩>90 D、SELECT 姓名 FROM 学生表,课程表 WHERE 学生表.学号=课程表.学号 AND 课程表.成绩>90
二、填空题
1.数据库系统的三级模式结构是指数据库系统由外模式、模式和内模式三级抽象模式构成。 2.备份是指将数据从硬盘复制到可移动媒体上的过程。
3.“实体一联系”方法是描述数据库概念模型的主要方法,一般称这种方法为E-R方法(或E-R图方法)。
4.用户使用SQL Server数据库时,一般需要经过两个安全性阶段:身份验证和权限认证。 5.E-R图设计一般在数据库设计的概念设计阶段使用。 三、判断题(正确的在括号内打上“√”,错误的打上“╳”。)
1.能够惟一表示数据表中的每条记录的字段或者字段的组合称为主码或主键(√)。 2.SQL Server数据库中的NULL值(空值)表示的是 “空格”或“0”值(╳)
3.一个不规范的关系模式通常会引发插入异常、删除异常和更新异常,导致大量的数据冗余。(√) 4.根据索引的特点,应该对那些数据量大、查询频度较高、实时性要求强的基本表创建索引,(√) 5.数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。(√)
6.参照完整性规则通常是指在两个参照和被参照关系中,参照关系中每条记录的外键或者为空,或者等于被参照关系中某条记录的主键。(√)
四、简述题
1.请简要说明视图的概念和作用
参考答案:视图是在基本表或其他视图上建立的表,它的结构和内容都来自某个基本表,是依据基本表存在而存在的。删除一个视图时,不会对基本表产生任何影响,但当删除一张基本表时,与之相关联的视图就会自动被删除。其作用主要是:(1)视图是经过预编译的SELECT语句,存储在数据库服务器端,因此执行视图比从客户端直接执行SELECT语句速度更快、效率更高一些。(2)视图属于用户模式范畴,在实际中,一般的用户不一定具有SELECT语句方面的专门知识,从用户友好性角度来说,视图更便于用户使用。(3)利用视图可以简化的形式表达复杂的SELECT语句组,如嵌套查询等。
2.什么是函数依赖与函数决定,请举例说明 参考答案:
设一个关系为R,X和Y是它的两个属性集。若对于X上的每个值都有Y上的一个惟一值与之对应,则称X和Y具有函数依赖关系,并称X函数决定Y,或称Y函数依赖于X,称X为决定因素。
假设一个职工关系为(职工号,姓名,性别,年龄,职务),职工号用来标识每个职工,选作该关系的主键。我们可以从以下两方面理解函数依赖的概念:首先,对于该关系中每个职工的职工号,都对应
着姓名属性中的惟一值,即该职工的姓名,或者说一个职工的姓名由其职工号惟一确定,所以称职工号函数决定姓名,或称姓名函数依赖于职工号。其次,除职工号外,其他属性都不能成为决定因素形成函数依赖,因为对于它们的每个属性值,都可能对应另一属性的多个不同的取值,比如对于性别属性的一个取值“男”就会对应多个而不是一个职工号。
3.请简要说明存储过程的概念和优点。 参考答案:
存储过程(Stored Procedure)是一组预先编译好的,以一种可执行的形式永久地存储在数据中的SQL代码。
使用存储过程的好处可归纳为以下几点:(a)执行速度快。在经过第一次调用以后,就驻留在内存中,不必再经过编译和优化;(b)模块化的程序设计。经过了一次创建以后,可以被调用无数次;(c)减少网络流量;(d)保证系统的安全性。
五、综合应用题
1.设有有以下基本表:(1)供应商表(供应商编号,供应商名称,供应商所在城市);(2)零件表(零件编号,零件名称,零件颜色,零件重量);(3)工程项目表(工程编号,工程名称,工程所在城市);(4)工程供货表(工程编号,供应商编号,零件编号,零件数量)。
用SQL语言写出下列查询语句, (1)查询所有工程的全部细节: SELECT * FROM 工程项目表
(2)查询所在城市为上海的所有工程的全部细节
SELECT * FROM 工程项目表 WHERE 工程所在城市=?上海? (3)查询重量最轻的零件代号
SELECT 零件编号FROM 零件表 WHERE 零件重量= (SELECT MIN(零件重量) FROM 零件表)
(4)查询为工程编号为“JG2008001”的工程提供零件的供应商编号 SELECT 供应商编号 FROM 工程供货表 WHERE 工程编号=?JG2008001? (5)查询为工程编号为“JG2008001”的工程提供零件编号为“P1”的供应商编号 SELECT 供应商编号 FROM 工程供货表
WHERE 工程编号=?JG2008001? AND 零件编号=?P1? (6)查询由供应商编号为S1的供应商提供零件的工程名称 SELECT 工程项目表.工程名称 FROM 工程项目表,工程供货表
WHERE 工程项目表.工程编号=工程供货表.工程编号 AND 工程供货表.供应商编号=?S1? (7)查询供应商S1提供的零件的颜色
SELECT DISTINCT零件表.零件颜色FROM零件表,工程供货表
WHERE 零件表.零件编号=工程供货表.零件编号 AND 工程供货表.供应商编号=?S1? (8)查询为所在城市为上海的工程提供零件的供应商编号
SELECT DISTINCT 工程供货表.供应商编号 FROM 工程项目表,工程供货表
WHERE 工程供货表.工程编号=工程项目表.工程编号 AND 工程项目表.工程所在城市=?上海? 2.用SQL语句创建简单数据表
设有两个关系(1)教师关系T,包括教师编号TNo,姓名TN,系别TD,职称RANK;(2)课程关系C,包括课程号CNo,课程名CN。教师编号和课程号分别是上述两个关系的主键,请用SQL语句创建教师数据表T。
参考答案: CREATE TABLE T{ TNo INT PRIMARY KEY, TN CHAR(30), TD CHAR(20), RANK CHAR(20) };
3.用SQL语句创建数据表
在上题基础上,假设还存在教师教授课程关系TC,包括教师编号TNo和课程号CNo。 注意:说明主键码和外键码约束 参考答案:
CREATE TABLE TC{ TNo INT, CNo INT,
PRIMARY KEY (Tno,Cno),
FOREIGN KEY (TNo) REFERENCES T(TNo), FOREIGN KEY (CNo) REFERENCES C(CNo) };
4.利用SQL语句进行查询
在上题的基础上,如果要查询“张红老师承担的所有课程”,请写出对应的SQL查询语句。 参考答案:
SELECT C.CNo,C.CN FROM T,C,TC
WHERE T.TNo=TC.TNo AND C.CN=TC.CNo AND T.TN=?张红?
5.程序应用题
设学生成绩表的结构为(学号、课程号、成绩),程序运行界面如图1所示。进入界面后,用户首先选择学号(Combo1)、课程号(Combo2),姓名(Text1)和课程名(Text2)从数据库中自动读入;然后,用户输入对应的成绩(Text3),点击“确认”按钮后,将结果插入到学生成绩表中。请补充完成下列程序代码。
图1“增加记录”窗体运行界面 Private Sub Command1_Click() ?声明一个记录集对象
Dim ADOrs As New Recordset
?将记录集对象与已建立的数据库联接对象ADOcn绑定 ADOrs.ActiveConnection=ADOcn
?第一步:在学生成绩表中查询是否存在关键字相同的记录 (1)拼写查询字符串 strSQL =“” (2)执行查询语句 strSQL
?第二步:如果关键字重复,则退出程序 If Not Then
MsgBox “记录已存在,不能继续增加” Exit Sub End If
?第三步:将结果插入到学生成绩表中
StrSQL=”Insert Into 学生成绩表(学号,课程号,成绩)Values(? ”+Combo1.Text+” ?,? “+Combo2.Text+” ?, “+Str(Val(Text3.Text))+”)”
StrSQL End Sub
参考答案及评分要点:
?第一步:在学生成绩表中查询是否存在关键字相同的记录
strSQL=”Select * From 学生成绩表 Where 学号=? ”+combo1.Text+” ? And 课程号=? “+Combo2.Text+” ? “
ADOrs.Open StrSQL
?第二步:如果关键字重复,则退出程序
If Not ADOrs.EOF Then
MsgBox “记录已存在,不能继续增加” Exit Sub End If
?第三步:将结果插入到学生成绩表中
StrSQL=”Insert Into 学生成绩表(学号,课程号,成绩)Values(? ”+Combo1.Text+” ?,? “+Combo2.Text+” ?, “+Str(Val(Text3.Text))+”)”
ADOcn.Execute StrSQL End Sub
创建学生成绩表 create table Stu_scores ( Sno char(9), Cno char(9), scores smallint, primary key (Sno,Cno),
foreign key (Sno) references Student(Sno), foreign key (Cno) references Course(Cno) );
3:为学生表插数据 这里不写:数据太多了! 4:(1)
select Sname from Student where Sno in (select Sno from Stu_scores where Cno='K10002' ) ;
(2)
select Student.Sno,Sname from Student,Stu_scores where Student.Sno=Stu_scores.Sno and scores<60;
(3)
select Cname,scores from Course,Stu_scores where Stu_scores.Cno=Course.Cno and Stu_scores.Sno='2010001' order by scores asc ;
(4)
select Sname,scores from Student,Course,Stu_scores where Student.Sno=Stu_scores.Sno and Stu_scores.Cno=Course.Cno and Course.Cname='C语言程序设计' ;