2025年数据库SQL期末考试题及答案_第1页
2025年数据库SQL期末考试题及答案_第2页
2025年数据库SQL期末考试题及答案_第3页
2025年数据库SQL期末考试题及答案_第4页
2025年数据库SQL期末考试题及答案_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2025年数据库SQL期末考试题及答案一、单项选择题(每题2分,共20分)1.以下关于主键(PRIMARYKEY)约束的描述中,错误的是()A.主键列值必须唯一且非空B.一个表中最多只能有一个主键C.主键可以由多个列共同组成D.主键约束会自动创建唯一索引,但不会创建聚集索引2.在SQL中,若要将两张表按“学生ID”字段进行左连接(LEFTJOIN),且仅保留“学生表”中存在但“成绩表”中无对应记录的学生,应使用的过滤条件是()A.WHERE成绩表.学生IDISNULLB.ON成绩表.学生IDISNULLC.HAVING成绩表.学生IDISNULLD.AND成绩表.学生ID=学生表.学生ID3.事务的“持久性”(Durability)是指()A.事务一旦提交,其对数据库的修改将永久保存B.事务执行过程中,其他事务不可干扰C.事务中的操作要么全部完成,要么全部不完成D.事务处理的数据必须满足数据库的完整性约束4.以下关于窗口函数(WindowFunction)的描述中,正确的是()A.窗口函数必须与GROUPBY子句配合使用B.ROW_NUMBER()函数会为相同值的行分配相同的序号C.窗口函数的OVER子句可以定义排序和分区规则D.窗口函数只能在SELECT语句中使用,不能在WHERE子句中使用5.若要查询“订单表”中每个客户最近一次下单的时间(按客户分组),最优的SQL语句是()A.SELECT客户ID,MAX(下单时间)AS最近下单时间FROM订单表GROUPBY客户IDB.SELECT客户ID,下单时间AS最近下单时间FROM订单表GROUPBY客户IDHAVING下单时间=MAX(下单时间)C.SELECT客户ID,下单时间AS最近下单时间FROM订单表WHERE下单时间IN(SELECTMAX(下单时间)FROM订单表GROUPBY客户ID)D.SELECT客户ID,FIRST_VALUE(下单时间)OVER(PARTITIONBY客户IDORDERBY下单时间DESC)AS最近下单时间FROM订单表6.以下关于索引的说法中,错误的是()A.聚集索引会改变表中数据的物理存储顺序B.非聚集索引的叶节点存储的是数据行的指针或聚集索引键C.为经常用于查询条件的列创建索引可以提高查询效率D.索引越多,数据库的写操作(INSERT/UPDATE/DELETE)性能越好7.在MySQL中,若要创建一个存储过程,实现根据学生ID查询其平均分并输出,正确的语法是()A.CREATEPROCEDUREGetAvgScore(INs_idINT,OUTavg_scoreDECIMAL(5,2))BEGINSELECTAVG(成绩)INTOavg_scoreFROM选课表WHERE学生ID=s_id;ENDB.CREATEFUNCTIONGetAvgScore(s_idINT)RETURNSDECIMAL(5,2)BEGINRETURN(SELECTAVG(成绩)FROM选课表WHERE学生ID=s_id);ENDC.CREATEPROCEDUREGetAvgScore(s_idINT)BEGINSELECTAVG(成绩)AS平均分FROM选课表WHERE学生ID=s_id;ENDD.CREATETRIGGERGetAvgScoreAFTERINSERTON选课表FOREACHROWBEGINSELECTAVG(成绩)INTO@avg_scoreFROM选课表WHERE学生ID=NEW.学生ID;END8.若“员工表”包含字段(员工ID,姓名,部门ID,入职时间),“部门表”包含字段(部门ID,部门名称),要查询所有部门的名称及对应员工的平均入职年限(假设当前时间为2025年),正确的SQL语句是()A.SELECT部门名称,AVG(YEAR(NOW())YEAR(入职时间))AS平均入职年限FROM员工表,部门表WHERE员工表.部门ID=部门表.部门IDGROUPBY部门名称B.SELECT部门名称,AVG(DATEDIFF(CURDATE(),入职时间)/365)AS平均入职年限FROM部门表LEFTJOIN员工表ON部门表.部门ID=员工表.部门IDGROUPBY部门名称C.SELECT部门名称,AVG(YEAR(CURRENT_DATE)YEAR(入职时间))AS平均入职年限FROM员工表INNERJOIN部门表ON员工表.部门ID=部门表.部门IDGROUPBY部门IDD.SELECT部门名称,AVG(TIMESTAMPDIFF(YEAR,入职时间,CURDATE()))AS平均入职年限FROM部门表LEFTJOIN员工表ON部门表.部门ID=员工表.部门IDGROUPBY部门名称9.以下关于视图(VIEW)的描述中,正确的是()A.视图可以直接修改基表的数据,只要满足可更新视图的条件B.视图的定义中不能包含ORDERBY子句C.视图会存储实际的数据,因此可以提高查询效率D.视图只能基于单张基表创建10.在事务隔离级别中,“可重复读”(REPEATABLEREAD)可以解决的问题是()A.脏读(DirtyRead)B.幻读(PhantomRead)C.不可重复读(Non-repeatableRead)D.以上都是二、填空题(每空2分,共20分)1.在SQL中,用于修改表结构的语句是__________。2.若要限制“年龄”字段的值在18到60之间,应使用的约束是__________。3.窗口函数中,用于计算当前行及其前后行汇总值的子句是__________。4.事务的四个特性(ACID)是原子性、一致性、__________和持久性。5.在MySQL中,存储引擎__________支持事务,而__________不支持事务。6.若要查询“学生表”中姓名以“张”开头且长度为2的学生,WHERE子句应写为__________。7.触发器(TRIGGER)的触发时机包括__________和AFTER两种。8.索引的类型包括聚集索引、非聚集索引、唯一索引和__________。三、简答题(每题6分,共30分)1.简述索引的优缺点。2.说明UNION和UNIONALL的区别,并举例说明适用场景。3.什么是事务的隔离级别?常见的隔离级别有哪些(按从低到高排序)?4.视图和表的主要区别是什么?何时适合使用视图?5.简述查询优化的常见方法(至少列举4种)。四、综合应用题(共30分)假设某高校数据库包含以下表结构(所有字段均非空):学生表(Student):Sno(学生学号,CHAR(8),主键),Sname(姓名,VARCHAR(20)),Sage(年龄,INT),Sdept(所在学院,VARCHAR(30))课程表(Course):Cno(课程编号,CHAR(4),主键),Cname(课程名称,VARCHAR(50)),Credit(学分,TINYINT),Tno(教师编号,CHAR(6))选课表(SC):Sno(学生学号,CHAR(8)),Cno(课程编号,CHAR(4)),Score(成绩,DECIMAL(5,2)),主键(Sno,Cno),外键(Sno)REFERENCESStudent(Sno),外键(Cno)REFERENCESCourse(Cno)教师表(Teacher):Tno(教师编号,CHAR(6),主键),Tname(教师姓名,VARCHAR(20)),Ttitle(职称,VARCHAR(10)),Tdept(所属学院,VARCHAR(30))请根据以上表结构,完成以下SQL语句编写:1.(6分)查询“计算机学院”(Sdept='计算机学院')所有学生的学号、姓名,以及他们已选课程的平均成绩(保留2位小数)。要求未选课的学生也需显示,平均成绩记为0。2.(8分)查询“高等数学”(Cname='高等数学')课程中,成绩高于该课程平均分的学生姓名、成绩,并按成绩降序排序。3.(8分)创建一个视图(v_teacher_course),显示教师姓名、职称、所授课程名称及课程学分。要求视图仅包含“教授”(Ttitle='教授')职称的教师。4.(8分)编写一个存储过程(proc_update_score),实现根据学生学号、课程编号和新成绩更新选课表中的成绩。要求:若新成绩小于0或大于100,则抛出错误提示“成绩必须在0-100之间”;若更新成功,输出“成绩更新成功”。答案--一、单项选择题1.D2.A3.A4.C5.A6.D7.A8.D9.A10.C二、填空题1.ALTERTABLE2.CHECK(年龄BETWEEN18AND60)3.ROWSBETWEENUNBOUNDEDPRECEDINGANDUNBOUNDEDFOLLOWING(或其他范围定义,合理即可)4.隔离性5.InnoDB;MyISAM6.WHERESnameLIKE'张_'7.BEFORE8.全文索引(或哈希索引等,合理即可)三、简答题1.优点:加速数据查询,减少全表扫描;提高连接操作效率;支持唯一性约束(唯一索引)。缺点:增加存储开销;影响写操作(INSERT/UPDATE/DELETE)性能;需要维护索引一致性;过多索引可能降低查询优化器效率。2.UNION会自动去重并对结果排序,UNIONALL直接合并结果(包含重复行)且不排序。适用场景:当需要合并两个结果集且确保无重复数据时用UNIONALL(性能更高);当需要去重时用UNION(如合并不同来源的用户数据)。3.事务隔离级别定义了事务之间的可见性和干扰程度。常见隔离级别(从低到高):读未提交(READUNCOMMITTED)、读已提交(READCOMMITTED)、可重复读(REPEATABLEREAD)、串行化(SERIALIZABLE)。4.区别:视图是虚拟表(不存储数据),表是实际存储数据的结构;视图依赖基表,基表结构改变可能导致视图不可用;视图可限制数据访问权限。适用场景:简化复杂查询、限制敏感数据访问、提供数据的逻辑视图(如按部门汇总数据)。5.常见方法:合理使用索引(为高频查询字段建索引);避免在WHERE子句使用函数或表达式;优化JOIN顺序(小表驱动大表);使用EXPLAIN分析查询执行计划;减少SELECT(只查询需要的字段);合理分表或分区;避免嵌套过深的子查询(改用JOIN)。四、综合应用题1.SELECTs.Sno,s.Sname,COALESCE(AVG(sc.Score),0)AS平均成绩FROMStudentsLEFTJOINSCscONs.Sno=sc.SnoWHEREs.Sdept='计算机学院'GROUPBYs.Sno,s.Sname;2.WITHavg_scoreAS(SELECTAVG(Score)AS课程平均分FROMSCscINNERJOINCoursecONsc.Cno=c.CnoWHEREc.Cname='高等数学')SELECTs.Sname,sc.ScoreFROMSCscINNERJOINCoursecONsc.Cno=c.CnoINNERJOINStudentsONsc.Sno=s.SnoCROSSJOINavg_scoreaWHEREc.Cname='高等数学'ANDsc.Score>a.课程平均分ORDERBYsc.ScoreDESC;3.CREATEVIEWv_teacher_courseASSELECTt.Tname,t.Ttitle,c.Cname,c.CreditFROMTeachertIN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论