完整word版数据库期末考试编程题.docx
《完整word版数据库期末考试编程题.docx》由会员分享,可在线阅读,更多相关《完整word版数据库期末考试编程题.docx(14页珍藏版)》请在冰豆网上搜索。
完整word版数据库期末考试编程题
四、编程题(每小题1分,共15分)
可能用到的表结构如下:
学生表(学号,姓名,性别,年龄,班级)
课程表(课程号,课程名,学分)
成绩表(学号,课程号,成绩)
1.创建存储过程GetStudentByID,带有参数sno,根据学生的学号查询学生情况
CreateprocedureGetStudendByIDsnovarchar(10)
As
Begin
Select*from学生表where学号=sno
end
2.编写SQL语句,查询学生表中所有学生,要求第一按照班级升序排序,第二按照年龄降序排序
select*from学生表orderby班级asc,年龄desc
3.编写SQL语句,查询学生表中姓张的学生
select*from学生表where姓名like'张%'
4.编写SQL语句,查询学生表中男女生的人数各多少人
select性别,count(*)from学生表groupby性别
5.编写SQL语句,查询所有比“王平”年龄大的情况
Select*from学生表where年龄>(select年龄from学生表where姓名=’王平’)
6.编写SQL语句,在学生表和成绩表中查询学号,姓名,课程号,成绩
SELECT学生表.学号,学生表.姓名,成绩表.课程号,成绩表.成绩FROM学生表INNERJOIN成绩表ON学生表.学号=成绩表.学号
7.编写SQL语句,将(1022,张望,男,19,信息2)的学生插入到学生表中
insertinto学生表(学号,姓名,性别,年龄,班级)values('1022','张望','男',19,'信息2')
8.编写SQL语句,将学号为1022学生的姓名改为张旺
update学生表set姓名='张旺'where学号='1022'
9.编写SQL语句,删除没有选课的学生
deletefrom学生表snonotin(selectsnofromsc)
10.编写SQL语句,查询课程号9的先行课的情况
select*from课程表where课程号=(select先行课号from课程表where课程号=9)
11.编写关系代数,查询选修3号课程的学生学号
∏学号(∫课程号=‘3’(选课表))
12.编写关系代数,查询至少选修了一门直接先行课为5号课程的学生姓名
参看课本60页
13.编写SQL语句,创建学生表
Createtable学生表(学号char(10),姓名varchar(20),性别char
(2),年龄int,班级char(30))
14.编写SQL语句,建立计算机1班男生的视图
Createviewasselect*from学生表where班级=‘计算机1班’and性别=‘男’
15.编写SQL语句,将对学生表的修改权限赋给用户U1
Grantupdateontable学生表toU1
1.设有一个学生课程数据库,包括学生关系Student、课程关系Course、选修关系SC,图1所示:
Student
学号
Sno
姓名
Sname
性别
Ssex
年龄
Sage
所在系
Sdept
95001
李勇
男
20
CS
95002
刘晨
女
19
IS
95003
王敏
女
18
MA
95004
张立
男
19
IS
Course
课程号
Cno
课程名
Cname
先行课
Cpno
学分
Ccredit
1
数据库
5
4
2
数学
2
3
信息系统
1
4
4
操作系统
6
3
5
数据结构
7
4
6
数据处理
2
7
PASCAL语言
6
4
SC
学号
Sno
课程号
Cno
成绩
Grade
95001
1
92
95001
2
85
95001
3
88
95002
2
90
95002
3
80
图1 学生-课程数据库
写出完成下列要求的SQL语句:
1)查询所有年龄在20岁以下的学生姓名与年龄。
1.selectSname,SagefromStudentwhereSage<20;
或selectSname,SagefromStudentwherenotSage>=20;
2)查询年龄不在20~23(包括20岁和23岁)之间的学生的姓名、系别和年龄。
selectSname,Sdept,SagefromStudentwhereSagenotbetween20and23;
3)查询每个学生及其选修课程的情况。
selectStudent.*,SC.*fromStudent,SCwhereStudent.Sno=SC.Sno;
2.把下面用关系表示的实体、实体与实体之间的联系,用E-R图表示出来,要求在图中表示联系的类型(1∶1、1∶n、m∶n)。
实体1:
学生(学号,姓名,性别,年龄)关键字为:
学号
实体2:
课程(课程号,课程名,学分数)关键字为:
课程号
实体1与实体2的联系:
学习(学号,课程号,成绩)关键字为:
学号+课程号
注:
一个学生可以选多门课程,一门课程也可以被多个学生选,学生选课后有成绩。
学生选课关系E-R图
五、编码题
1、下面给出三个关系模式:
(1)学生关系S(SNO,SName,SAge,SSex)
(2)课程关系C(CNO,CName,CTeacher)
(3)学习关系SC(SNO,CNO,Grade)
根据要求用T-SQL完成下列各题。
(1)检索学习课程号为“C01001”的学生学号与姓名;
(2)检索至少选修课程号为“C00101”和“C02341”的学生学号。
答:
(1)SELECTS.S#,SNAME
FROMS,SC
WHERES.S#=SC.S#ANDC#=’C01001’
(2)SELECTX.S#
FROMSCASX,SCASY
WHEREX.S#=Y.S#ANDX.C#=’C00101’ANDY.C#=’C02341’
2、图书管理数据库BookManager由以下四个关系模式组成,根据该结构用T-SQL完成以下各题。
(1)读者(借书证号,姓名,性别,出生日期)
(2)图书(ISBN,图书名称,作者,出版社,价格,数量)
(3)借阅(借书证号,ISBN,借出时间)
根据要求完成下列各题。
(1)创建一个名称为BookManager的数据库,其初始大小为10MB,最大为20MB,允许数据库自动增长;日志文件初始大小为2MB,最大为5MB。
文件存储在目录D:
\TEST下。
(2)编写一个存储过程,查询某读者当前的借书情况。
(3)创建一个触发器,如果在图书表中添加或更改数据,则向客户端显示一条信息。
解:
(1)CREATEDATABASEBookManager
ON(NAME=’BookManager_DATA’,
FILENAME=’D:
\TEST\BookManager.MDF’,
SIZE=10MB,
MAXSIZE=20MB,
FILEGROWTH=10%)
LOGON(
FILENAME=’D:
\TEST\BookManager.LDF’,
SIZE=2MB,
MAXSIZE=5MB,
FILEGROWTH=10%)
(2)CREATEPROCEDUREproc_reader
@lib_numchar(8)
AS
SELECTA.借书证号,姓名,B.ISBN,书名
FROMReaderA,JYB,BOOKC
WHEREA.借书证号=B.借书证号ANDB.ISBN=C.ISBNANDA.借书证号=@lib_num
(3)CREATETRIGGERtrig_reminderONReader
FORINSERT,UPDATE
AS
RAISEERROR(4008,16,10)
3、设有学生表S(SNO,SN)(SNO为学生号,SN为姓名)和学生选修课程表SC(SNO,CNO,CN,G)(CNO为课程号,CN为课程名,G为成绩),试用SQL语言完成以下各题:
(1)建立一个视图V_SSC(SNO,SN,CNO,CN,G),并按CNO升序排序;
(2)从视图V_SSC上查询平均成线在90分以上的SN、CN和G。
答:
(1)CREATEVIEWV_SSC(SNO,SN,CNO,CN,G)
ASSELECTS.SNO,S.SN,CNO,SC.CN,SC.G
FROMS,SC
WHERES.SNO=SC.SNO
ORDERBYCNO
(2)SELECTSN,CN,G
FROMV_SSC
GROUPBYSNO
HAVINGAVG(G)>90
4、图书管理数据库BookManager由以下四个关系模式组成,根据该结构用T-SQL完成以下各题。
(1)读者(借书证号,姓名,性别,出生日期)
(2)图书(ISBN,图书名称,作者,出版社,价格,数量)
(3)借阅(借书证号,ISBN,借出时间)
根据要求完成下列各题。
(1)创建一个名称为BookManager的数据库,其初始大小为10MB,最大为20MB,允许数据库自动增长;日志文件初始大小为2MB,最大为5MB。
文件存储在目录D:
\TEST下。
(2)编写一个存储过程,查询某读者当前的借书情况。
(3)创建一个触发器,如果在图书表中添加或更改数据,则向客户端显示一条信息。
解:
(1)CREATEDATABASEBookManager
ON(NAME=’BookManager_DATA’,
FILENAME=’D:
\TEST\BookManager.MDF’,
SIZE=10MB,
MAXSIZE=20MB,
FILEGROWTH=10%)
LOGON(
FILENAME=’D:
\TEST\BookManager.LDF’,
SIZE=2MB,
MAXSIZE=5MB,
FILEGROWTH=10%)
(2)CREATEPROCEDUREproc_reader
@lib_numchar(8)
AS
SELECTA.借书证号,姓名,B.ISBN,书名
FROMReaderA,JYB,BOOKC
WHEREA.借书证号=B.借书证号ANDB.ISBN=C.ISBNANDA.借书证号=@lib_num
(3)CREATETRIGGERtrig_reminderONReader
FORINSERT,UPDATE
AS
RAISEERROR(4008,16,10)
5、下面给出一个商品销售数据库中包含的三个基本表:
(1)客户表:
table_Client(CNO,Cname,Csex,Cbirthday)
(2)商品表:
table_Goods(GNO,Gname,Gunit,Gprice)
(3)购物表:
table_CG(CNO,GNO,CGquantity)
用T-SQL语句完成下列各题。
(1)查询购买了商品的客户号及姓名。
(2)查询1978年出生的客户号及姓名。
(3)购买了三种以上商品的客户号及客户姓名。
答:
(1)selectCNO,Cname
fromtable_Client
whereCNOin
(selectdistinctCNO
fromtable_CG)
(2)selectCNO,Cname
fromtable_Client
whereCbirthday=’1978’
(3)selectCNO,Cname
fromtable_Client
whereCNOin
(selectCNO
fromtable_CG
groupbyCNO
havingcount(*)>3)
6、学生-选课-课程数据库由以下四个关系模式构成:
STUDENT(SNO,SName,SAge,SSex,SAddress)
TEACHER(TNO,TTeacher,TPos,TAddress)
COURSE(CNO,CName,CTerm,CCredit,TNO)
SELECTCOURSE(SNO,CNO,Grade)
按要求完成下列各题。
(1)用SQL语句建立STUDENT表。
(2)为COURSE表建立插入触发器,保证教师编号的正确性。
(1)
解:
createtablestudent
(
snonvarchar(8),
snamenvarchar(10),
sageint,
ssexchar(4),
saddressnvarchar(50),
primarykey(sno)
)
(2)
createtriggercourse_insert_tnooncourse
forinsert
asif(notexists
(selecttnofromteacherwheretnoin
(selectinserted.tnofrominserted)))
begin
print'无此教师'
rollbacktransaction
end
1、设学生课程数据库中有三个关系:
学生关系S(S#,SNAME,AGE,SEX)
学习关系SC(S#,C#,GRADE)
课程关系C(C#,CNAME)
其中S#、C#、SNAME、AGE、SEX、GRADE、CNAME分别表示学号、课程号、姓名、年龄、性别、成绩和课程名。
用SQL语句表达下列操作
(1)检索选修课程名称为“MATHS”的学生的学号与姓名
(2)检索至少学习了课程号为“C1”和“C2”的学生的学号
(3)检索年龄在18到20之间(含18和20)的女生的学号、姓名和年龄
(4)检索平均成绩超过80分的学生学号和平均成绩
(5)检索选修了全部课程的学生姓名
(6)检索选修了三门课以上的学生的姓名
答案:
(1)SELECTSNAME,AGE
FROMS,SC,C
WHERES.S#=SC.S#
ANDC.C#=SC.C#
ANDCNAME=’MATHS’
(2)SELECTS#
FROMSC
WHERECNO=’C1’ANDS#IN(SELECTS#
FROMSC
WHERECNO=’C2’)
(3)SELECTS#,SNAME,AGE
FROMS
WHEREAGEBETWEEN18AND20
(4)SELECTS#,AVG(GRADE)‘平均成绩’
FROMSC
GROUPBYS#
HAVINGAVG(GRADE)>80
(5)SELECTSNAME
FROMS
WHERENOTEXISTS
(SELECT*
FROMC
WHERENOTEXISTS
(SELECT*
FROMSC
WHERES#=S.S#ANDC#=C.C#
)
)
(6)SELECTSNAME
FROMS,SC
WHERES.S#=SC.S#
GROUPBYSNAME
HAVINGCOUNT(*)>3
2、设学生-课程数据库中包括三个表:
学生表:
Student(Sno,Sname,Sex,Sage,Sdept)
课程表:
Course(Cno,Cname,Ccredit)
学生选课表:
SC(Sno,Cno,Grade)
其中Sno、Sname、Sex、Sage、Sdept、Cno、Cname、Ccredit、Grade分别表示学号、姓名、性别、年龄、所在系名、课程号、课程名、学分和成绩。
试用SQL语言完成下列项操作:
(1)查询选修课程包括“1042”号学生所学的课程的学生学号
(2)创建一个计科系学生信息视图S_CS_VIEW,包括Sno学号、Sname姓名、Sex性别;
(3)通过上面第2题创建的视图修改数据,把王平的名字改为王慧平
(4)创建一选修数据库课程信息的视图,视图名称为datascore_view,包含学号、姓名、成绩。
答案:
(1)SELECTDISTINCTSNO
FROMSCSCX
WHERENOTEXISTS
(SELECT*
FROMSCSCY
WHERESCY.SNO='1042'AND
NOTEXISTS
(SELECT*
FROMSCSCZ
WHERESCZ.SNO=SCX.SNOAND
SCZ.CNO=SCY.CNO));
(2)CREATEVIEWS_CS_VIEW
AS
SELECTSNO,SNAME,SEX
FROMSTUDENT
WHERESdept=’CS’
(3)UPDATES_CS_VIEW
SETSNAME=’王慧平’
WHERESNAME=’王平’
(4)CREATEVIEWdatascore_view
AS
SELECTSNO学号、SNAME姓名、GRADE成绩
FROMSTUDENT,SC,COURSE
WHERESTUDENT.SNO=SC.SNO
ANDCOURSE.CNO=SC.CNO
ANDCNAME=’数据库’