2022年数据库上机习题及答案分享 .pdf
数据库及应用复习题一、设计题有一个 学生课程 数据库,数据库中包括三个表:学生表 Student 由学号(Sno) 、姓名(Sname)、性别(Ssex) 、年龄(Sage)、所在系(Sdept) 五个属性组成,记为:Student(Sno,Sname,Ssex,Sage,Sdept),Sno 为关键字。课程表 Course 由课程号 (Cno)、课程名 (Cname)、先修课号 (Cpno)、学分(Ccredit)四个属性组成,记为: Course(Cno,Cname,Cpno,Ccredit)Cno为关键字。成绩表 SG由学号(Sno) 、课程号 (Cno)、成绩(Grade) 三个属性组成,记为:SG(Sno,Cno,Grade) (SNO, CNO) 为关键字。用 SQL语言实现下列功能:1建立学生表 Student ,其中学号属性不能为空,并且其值是唯一的。2向Student 表增加“入学时间 (Scome)”列,其数据类型为日期型。3查询选修了 3号课程的学生的学号及其成绩,查询结果按分数的降序排列。4查询学习 1号课程的学生最高分数、平均成绩。5查询与“李洋”在同一个系学习的学生。6将计算机系全体学生的成绩置零。7删除学号为 05019的学生记录。8删除计算机系所有学生的成绩记录。1CREATETABLE Student(Sno CHAR(5) NOTNULLUNIQUE,SnameCHAR(20),Ssex CHAR(2),Sage INT,Sdept CHAR(15)2ALTERTABLEStudentADDScomeDATETIME3SELECTSno, GradeFROM SGWHERE Cno=3ORDER BY Grade DESC4SELECTMAX(Grade), AVG(Grade)FROM SCWHERE Cno=15SELECTSno, Sname, SdeptFROM StudentWHERE Sdept IN名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - (SELECTSdept FROM StudentWHERE Sname= 李洋)6 UPDATE SGSETGrade=0WHERE Sno in( SELECTSno FROM StudentWHERE Sdept = 计算机系 )7DELETE FROM StudentWHERE Sno=050198 DELETE FROM SGWHERE Sno in( SELECTSno FROM StudentWHERE Sdept = 计算机系 )二、设计题现有关系数据库如下:数据库名:教师数据库教师表(编号 char(6) ,姓名,性别,民族,职称,身份证号)课程表(课号 char(6) ,名称)任课表(ID ,教师编号 , 课号,课时数)用 SQL语言实现下列功能的sql 语句代码:1. 创建上述三表的建库、建表代码(14 分);要求使用:主键 (教师表. 编号,课程表 . 课号)、外键(任课表. 教师编号,任课表. 课号)、默认(民族)、非空(民族,姓名)、唯一(身份证号 )、检查(性别、课时数 ), 自动编号 (ID)2. 将下列课程信息添加到课程表的代码(6 分)课号课程名称100001SQLServer 数据库100002数据结构100003VB程序设计修改课号为 100003的课程名称: VisualBasic 程序设计删除课号为 100003的课程信息3. 写出创建 任课表视图 ( 教师编号,姓名,课号,课程名称,课时数)的代码;(4 分)4. 写出创建 某门课任课教师 内嵌表值函数以及检索的代码;(6 分)检索:所有代 SQL Server 数据库 这门课程的老师姓名;5. 写出创建 统计课时数 :输出最大课时数、最低课时数、平均课时的存储过程以及执行代码; (6 分)6. 写出创建: 计算某教师代课总课时, 并将值返回的存储过程以及执行代码。(6 分)执行:计算“郭老师”的总课时。(6 分)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 7. 检索有一门或一门以上课程课时数大于90 的所有教师的信息,包括编号、姓名。(4 分)8.建一个规则,并将其绑定到教师表的职称列上,规定取值为( 教授,副教授,讲师, 助教 )之一。 (4 分)1.createdatabase 教师数据库- (2分)use 教师数据库gocreatetable教师表- (6分)( 编号char(6)primarykey, 姓名nchar(4)not null, 性别nchar(1)check( 性别in( 男, 女), 民族nchar(8)default 汉族 not null, 职称nchar(12), 身份证号char(18)unique)createtable课程表- (2分)( 课号char(6)primarykey, 名称char(40)not null)createtable任课表- (4 分)(ID IDENTITY(1, 1), 教师编号char(6)references学生表(学号), 课号char(6)references课程表(课号), 课时数integercheck( 课时数between 0 and 200)2.insert课程表 values(100001,SQL Server 数据库)insert课程表 values(100002, 数据结构 )insert课程表 values(100003,VB 程序设计 )update课 程 表set名 称 =VisualBasic 程 序 设 计 where 课 号=100003delete课程表 where 课号=1000033.createview 任课表视图asselect教师编号 , 姓名, 课号, 课程名称 , 课时数from 教师表, 任课表where 教师表. 编号=任课表. 教师编号4.createfunction 某门课任课教师 (课程名varchar(15)returnstableasreturn(select课程名称, 课时数, 教师姓名 =姓名 from 任课表视图where 课程名= 课程名)goselect* from 某门课任课教师 (SQLServer 数据库)5.createprocedure 统计课时数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - asselect最大课时数 =max(课时), 最小课时数 =min(课时), 平均课时数=avg(课时) from 任课表goexecute 统计课时6.createprocedure 统计课时 教师名 nchar(16),asbegindeclare 总课时 intselect 总课时=sum (课时) from 任课表视图where 姓名 = 教师名endgoexecute 统计课时 郭老师7.select编号, 姓名 from 教师表where 编号in(selectdistinct教师编号from 任课表where 课时数=90)8.createrulezhicheng_ruleas zhichengin( 教授,副教授,讲师, 助教)gosp_bindrulezhicheng_rule, 教师表. 职称三、设计题 (共 50 分)现有关系数据库如下:数据库名:医院数据库医生表(编号,姓名,性别,出生日期,职称)病人表(编号,姓名,性别,民族,身份证号)病历表(ID ,病人编号 , 医生编号,病历描述)用 SQL语言实现下列功能的sql 语句代码:1. 创建上述三表的建库、建表代码;要求使用:主键 (师医生表 . 编号,病人表 . 课号)、外键(病历表. 医生编号,病历表. 病人课号 )、非空(职称,姓名 )、检查(性别), 自动编号 (ID)(16分)2. 将下列医生信息添加到医生表的代码编号姓名 性别 出生日期 职称100001 杜医生 男 1963-5-18 副主任医师100002 郭医生 女 1950-7-26 副主任医师100003 刘医生 男 1973-9-18 医师修改编号为 100002的医生职称为主任医师删除编号为 100003的医生信息(8 分)3. 写出创建:医疗表视图 (医生编号,姓名,病人姓名,病历)的代码; (4分)4. 写出所有病人编号、姓名、病历、以及病人所对应的医生编号的查询语句;(4 分)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - 7. 写出创建:输出某医生(根据医生编号即可)看病人数存储过程以及执行过程(要求输入医生姓名的参数,输出病人数)(6 分)。8. 写出查询 1970年以前出生的医生 (4 分)。7. 检索有病人的医生信息。 (4 分)8. 创建一个默认,并将其绑定到医生表的成绩职称列上,默认值为“医师”。(4 分)1.createdatabase 医院数据库use 医院数据库gocreatetable医生表( 编号char(6)primarykey, 姓名nchar(4)not null , 性别nchar(1)check( 性别in( 男, 女) , 出生日期 datetime, 职称char(18)not null)createtable 病人表( 课号char(6)primarykey, 姓名nchar(4)not null, 性别nchar(1)check( 性别in( 男, 女) , 民族nchar(10), 身份证号char(18)not null)createtable 病历表(ID IDENTITY(1, 1), 病人编号char(6)references病人表(学号), 医生编号char(6)references医生表(编号), 病历描述varchar (1000))2.insert医生表values(100001, 杜医生, 男,1963-5-18, 副主任医师 )insert医生表values(100002, 郭医生, 女,1950-7-26, 副主任医师 )insert医生表values(100003, 刘医生, 男,1973-9-18, 医师)update 医生表 set 职称= 主任医师where 编号=100002delete 医生表 where 编号=1000033.名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - createview 医疗表视图asselectbr. 姓名,ys. 姓名,yl.病历from 病人表as br join医疗表 asylon br. 编号 yl. 病人编号join医生表 as yson yl. 医生编号 =ys. 编号4Selectbr. 编号, br. 姓名, br. 病历, yl. 医生编号from 病人表 br leftjoin医疗表 ylon br. 编号 = yl. 病人编号5createprocedure 某医生看病人数 医生编号nchar(16), 人数 intoutputasselect 人数=count( 病人编号)from 病人表where 医生编号= 医生编号godeclareTOTAL intexecute 某医生看病人数100001,TOTAL6select* from 医生表 where 出生日期 1970-01-019.select编号, 姓名, 性别, 出生日期, 职称 from 医生表where 编号 in(select医生编号from 医疗表)8.createdefaultzhichengAS 医师goexec sp_bindefaultzhicheng, 医生表. 职称四、设计题 (共 50 分)现有关系数据库如下:数据库名:学生选课数据库学生表(学号,姓名,性别,年龄,专业)课程表(课程号,课程名,学分,先行课程号)选课表( ID,学号,课程号,分数)用 SQL语言实现下列功能的sql 语句代码:1. 创建数据库 学生选课数据库 代码(2 分);2. 创建 课程表 代码(2 分);课程表(课程号char(6) ,课程名,学分,先行课程号)要求使用:主键 (课程号)、非空(课程名,学分)3. 创建 学生表 代码(6 分);名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - 学生表(学号 char(6) ,姓名,性别,年龄,专业)要求使用:主键 (学号)、非空(姓名, 专业)、检查(性别)4. 创建 选课表 代码(4 分);选课表(ID, 学号,课号,分数)要求使用:外键(选课表. 学号,选课表. 课程号)、 检查(分数), 自动编号 (ID)5. 将下列课程信息添加到课程表的代码(8 分)课程号课程名学分先行课程号100001C语言2100002数据结构2100001100003数据库原理2修改课程号为 100003的课程名: SQL数据库删除课程号为 100002的课程信息6. 写出创建:选课表视图 (学号,姓名,课程号,课程名,学分,分数)的代码;(4 分)7. 写出创建:某门课程成绩内嵌表值函数以及检索的代码;(6 分)检索:所有修SQL数据库这门学生的成绩;8. 写出创建:某门课程高低均分计算某门课程成绩最高分、最低分、平均分 存储过程以及执行的代码;(6 分)执行:所有修SQL数据库这门学生的最高分、最低分、平均分;9. 检索姓张的女同学的情况:姓名、学号、专业。(2 分)10.检索有一门或一门以上课程成绩小于60分的所有学生的信息,包括学号、姓名。(4 分)1.createdatabase 学生选课数据库gouse 学生选课数据库go2.createtable学生表( 学号char(6)primarykey, 姓名nchar(4)not null , 性别nchar(1)check( 性别in( 男, 女) , 年龄numeric(2), 专业char(18)not null)3.createtable 课程表( 课程号char(6)primarykey, 课程名char(40)not null , 学分numeric(2)not null , 先行课程号char(6)4.名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - createtable 选课表(ID IDENTITY(1, 1), 学号char(6)references学生表(学号), 课程号char(6)references课程表(课程号), 分数integercheck( 分数between 0 and 100)5.insert课程表 values(100001,C 语言 ,2)insert课程表 values(100002, 数据结构 ,2, 100001)insert课程表 values(100003, 数据库原理 ,2)update 课程表 set 课程名=SQL 数据库 where 课程号=100003delete 课程表 where 课程号=1000026. createview 选课表视图asselect选课表. 学号, 姓名, 选课表. 课程号, 课程名,学分, 分数from 选课表, 学生表, 课程表where 选课表. 学号=学生表. 学号and 选课表. 课程号=课程表. 课程号- 或createview 选课表视图asselect选课表. 学号, 姓名, 选课表. 课程号, 课程名,学分, 分数from 选课表 join学生表 on 选课表. 学号=学生表. 学号join课程表 on 选课表. 课程号=课程表. 课程号7.createfunction 某门课程成绩 (课程名varchar(40)returnstableasreturn(select学号, 姓名, 课程名, 学分, 分数 from 选课表视图where 课程名= 课程名)goselect* from 某门课程成绩 (SQL 数据库)8.createprocedure 某门课程高低均分 课程名varchar(40)asselect课程名, 最高分=max(分数)、最低分 =min(分数)、平均分 =avg(分数)from 选课表视图where 课程名 = 课程名goexecute 某门课程高低均分SQL 数据库9.select姓名, 学号, 专业 from 学生表where 姓名 like 张% and 性别= 女10.select学号, 姓名, 专业 from 学生表 where 学号 in(selectdistinct学号 from 选课表 where 分数60)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -