2025年数据库sql语言编程试题及答案_第1页
2025年数据库sql语言编程试题及答案_第2页
2025年数据库sql语言编程试题及答案_第3页
2025年数据库sql语言编程试题及答案_第4页
2025年数据库sql语言编程试题及答案_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

2025年数据库sql语言编程试题及答案一、单项选择题(每题2分,共20分)1.以下关于主键(PRIMARYKEY)的描述中,错误的是()。A.主键列的值必须唯一且非空B.一个表中最多只能有一个主键C.主键可以由多个列组合构成D.主键约束会自动创建唯一索引,但不会创建聚集索引2.在SQL中,若要查询学生表(student)中“年龄大于20岁且性别为女”的记录,正确的WHERE子句是()。A.WHEREage>20ANDgender=女B.WHEREage>20ORgender='女'C.WHEREage>20ANDgender='女'D.WHEREage>20WITHgender='女'3.以下哪种索引类型适用于范围查询(如查询价格在100-200元之间的商品)?()A.哈希索引B.B树索引C.全文索引D.空间索引4.执行“SELECTCOUNT()FROMordersWHEREorder_dateBETWEEN'2024-01-01'AND'2024-12-31'”时,若orders表中order_date字段未建立索引,最可能的执行方式是()。A.全表扫描B.索引扫描C.索引查找D.嵌套循环连接5.事务的ACID特性中,“隔离性(Isolation)”指的是()。A.事务一旦提交,其结果对数据库的影响是永久的B.事务的所有操作要么全部完成,要么全部不完成C.事务执行时不受其他事务干扰,中间状态不可见D.事务处理的数据必须满足数据库的约束条件6.若要为员工表(employee)的“入职日期(hire_date)”字段添加CHECK约束,要求入职日期不早于2000年1月1日,正确的SQL语句是()。A.ALTERTABLEemployeeADDCONSTRAINTck_hire_dateCHECK(hire_date>='2000-01-01')B.ALTERTABLEemployeeADDCONSTRAINTck_hire_dateCHECK(hire_date>'2000-01-01')C.ALTERTABLEemployeeADDCONSTRAINTck_hire_dateCHECK(hire_date<='2000-01-01')D.ALTERTABLEemployeeADDCONSTRAINTck_hire_dateCHECK(hire_date<'2000-01-01')7.在SQL窗口函数中,若要计算每个部门的工资总和,并将结果显示在每一行中,应使用()。A.ROW_NUMBER()B.SUM(salary)OVER(PARTITIONBYdept_id)C.AVG(salary)OVER(ORDERBYdept_id)D.RANK()OVER(PARTITIONBYdept_idORDERBYsalary)8.以下关于子查询的描述中,正确的是()。A.子查询必须用括号括起来,且只能出现在WHERE子句中B.相关子查询的执行依赖于外层查询的结果C.非相关子查询的执行效率一定高于相关子查询D.子查询的结果只能是单行单列9.若要删除用户表(user)中所有“注册时间(reg_time)”早于2020年的记录,正确的SQL语句是()。A.DELETEuserWHEREreg_time<'2020-01-01'B.DROPFROMuserWHEREreg_time<'2020-01-01'C.DELETEFROMuserWHEREreg_time<'2020-01-01'D.TRUNCATEuserWHEREreg_time<'2020-01-01'10.在MySQL中,若要授予用户“test_user”对数据库“school”中“student”表的SELECT和INSERT权限,正确的SQL语句是()。A.GRANTSELECT,INSERTONschool.studentTO'test_user'@'localhost'B.GRANTSELECT,INSERTFORschool.studentTO'test_user'@'localhost'C.GRANT(SELECT,INSERT)ONschool.studentTO'test_user'@'localhost'D.GRANTSELECTANDINSERTONschool.studentTO'test_user'@'localhost'二、填空题(每题2分,共20分)1.在SQL中,使用__________语句创建表,使用__________语句修改表结构。2.若要查询学生表中年龄最大的学生信息,可使用子查询或__________函数(如MySQL中的LIMIT)。3.事务的回滚操作使用__________语句,提交操作使用__________语句。4.窗口函数的基本语法是:函数名()OVER([PARTITIONBY列][ORDERBY列][窗口框架]),其中PARTITIONBY的作用是__________。5.索引分为聚集索引和非聚集索引,聚集索引决定了数据的__________顺序。6.若要将员工表(employee)中“部门ID(dept_id)”为3的员工工资增加10%,应使用__________语句。7.在SQL中,UNION操作符用于合并两个或多个SELECT语句的结果集,要求各SELECT语句的__________必须相同。8.触发器(TRIGGER)是一种特殊的存储过程,它在__________、UPDATE或DELETE操作前后自动执行。9.若要查询订单表(orders)中每个客户(customer_id)的最近一次订单时间,可使用窗口函数__________配合PARTITIONBY和ORDERBY。10.在SQL中,处理NULL值的常用函数有__________(返回第一个非NULL值)和ISNULL(或COALESCE)。三、简答题(每题6分,共30分)1.简述主键(PRIMARYKEY)与唯一约束(UNIQUECONSTRAINT)的区别。2.说明LEFTJOIN、INNERJOIN和FULLOUTERJOIN的区别,并举例说明应用场景。3.索引可以提高查询效率,但并非越多越好。请分析索引的优缺点。4.事务的隔离级别有哪些?简述“可重复读(REPEATABLEREAD)”和“读已提交(READCOMMITTED)”的区别。5.窗口函数与传统聚合函数(如SUM、AVG)的主要区别是什么?请举例说明。四、编程题(每题8分,共40分)(以下题目基于以下表结构,假设所有字段均为非空)学生表(student):s_id(学生ID,主键),s_name(姓名),gender(性别),college(学院),birth_date(出生日期)课程表(course):c_id(课程ID,主键),c_name(课程名称),credit(学分),teacher(授课教师)成绩表(score):s_id(学生ID,外键),c_id(课程ID,外键),score(分数),exam_date(考试日期)1.查询“计算机学院”所有男生的姓名、年龄(按当前日期计算),结果按年龄降序排列。(注:当前日期为2024年12月31日)2.统计每门课程的平均分、最高分和最低分,要求结果包含课程名称、平均分(保留2位小数)、最高分、最低分。3.查询所有选修了“数据结构”课程且分数低于60分的学生姓名、学院及分数,结果按学院分组,同一学院内按分数升序排列。4.使用窗口函数,查询每个学生的所有课程分数排名(按分数降序),结果包含学生姓名、课程名称、分数、排名(排名允许并列)。5.编写一个存储过程,输入学生ID和课程ID,输出该学生该课程的分数等级(90分及以上为“A”,80-89为“B”,70-79为“C”,60-69为“D”,低于60为“F”)。五、综合应用题(20分)某电商公司需要设计一个订单管理系统,涉及以下业务需求:客户(customer):客户ID(cust_id,主键)、姓名(cust_name)、注册时间(reg_time)、所在地区(region)订单(order):订单ID(order_id,主键)、客户ID(cust_id,外键)、订单金额(amount)、下单时间(order_time)、支付状态(status,取值为“未支付”“已支付”“已退款”)订单明细(order_item):明细ID(item_id,主键)、订单ID(order_id,外键)、商品ID(prod_id)、数量(quantity)、单价(price)请完成以下任务:1.写出创建订单表(order)的SQL语句,要求包含外键约束(关联customer表的cust_id),并为order_time字段添加索引。2.查询2024年每个地区的总订单金额(仅统计已支付订单),并按总金额降序排列,结果包含地区、总金额(保留2位小数)。3.编写一个触发器,当订单明细(order_item)插入新记录时,自动更新对应订单(order)的总金额(amount=原amount+quantityprice)。4.分析“查询2024年某地区客户的平均订单金额”的执行计划,若该查询效率较低,提出至少2种优化建议。-答案一、单项选择题1.D2.C3.B4.A5.C6.A7.B8.B9.C10.A二、填空题1.CREATETABLE;ALTERTABLE2.MAX(或类似逻辑,如ORDERBY后取第一条)3.ROLLBACK;COMMIT4.将结果集划分为多个分区,函数在每个分区内独立计算5.物理存储6.UPDATEemployeeSETsalary=salary1.1WHEREdept_id=37.列数和数据类型8.INSERT9.LAST_VALUE(order_time)OVER(PARTITIONBYcustomer_idORDERBYorder_time)或ROW_NUMBER()配合筛选10.COALESCE(或IFNULL,具体取决于数据库)三、简答题1.区别:①主键不允许NULL值,唯一约束允许一个NULL值;②一个表只能有一个主键,但可以有多个唯一约束;③主键自动创建聚集索引(部分数据库),唯一约束创建非聚集索引。2.LEFTJOIN返回左表所有记录,右表匹配的记录,不匹配时右表字段为NULL;INNERJOIN仅返回左右表都匹配的记录;FULLOUTERJOIN返回左右表所有记录,不匹配时对方表字段为NULL。例如:查询所有学生及其选课情况(包括未选课的学生)用LEFTJOIN。3.优点:加速查询,减少全表扫描;缺点:增加写操作(INSERT/UPDATE/DELETE)的开销,占用存储空间,可能影响索引维护效率。4.隔离级别:读未提交(READUNCOMMITTED)、读已提交(READCOMMITTED)、可重复读(REPEATABLEREAD)、串行化(SERIALIZABLE)。区别:可重复读保证同一事务内多次读取同一数据结果一致;读已提交仅保证读取到已提交的数据,但可能出现不可重复读。5.传统聚合函数将多行数据合并为一行,窗口函数不减少行数,在每一行中显示聚合结果。例如:计算每个部门的工资总和,传统聚合函数返回每个部门一行,窗口函数返回每个员工一行并显示所在部门的总和。四、编程题1.```sqlSELECTs_name,TIMESTAMPDIFF(YEAR,birth_date,'2024-12-31')ASageFROMstudentWHEREcollege='计算机学院'ANDgender='男'ORDERBYageDESC;```2.```sqlSELECTc.c_name,ROUND(AVG(s.score),2)ASavg_score,MAX(s.score)ASmax_score,MIN(s.score)ASmin_scoreFROMcoursecJOINscoresONc.c_id=s.c_idGROUPBYc.c_id,c.c_name;```3.```sqlSELECTs.s_name,st.college,sc.scoreFROMscorescJOINstudentstONsc.s_id=st.s_idJOINcoursecONsc.c_id=c.c_idWHEREc.c_name='数据结构'ANDsc.score<60ORDERBYst.college,sc.scoreASC;```4.```sqlSELECTst.s_name,c.c_name,sc.score,RANK()OVER(PARTITIONBYst.s_idORDERBYsc.scoreDESC)ASrankFROMscorescJOINstudentstONsc.s_id=st.s_idJOINcoursecONsc.c_id=c.c_id;```5.```sqlDELIMITER$$CREATEPROCEDUREGetScoreLevel(INp_s_idINT,INp_c_idINT,OUTp_levelCHAR(1))BEGINDECLAREv_scoreINT;SELECTscoreINTOv_scoreFROMscoreWHEREs_id=p_s_idANDc_id=p_c_id;IFv_score>=90THENSETp_level='A';ELSEIFv_score>=80THENSETp_level='B';ELSEIFv_score>=70THENSETp_level='C';ELSEIFv_score>=60THENSETp_level='D';ELSESETp_level='F';ENDIF;END$$DELIMITER;```五、综合应用题1.```sqlCREATETABLE`order`(order_idINTPRIMARYKEYAUTO_INCREMENT,cust_idINTNOTNULL,amountDECIMAL(10,2)NOTNULLDEFAULT0,order_timeDATETIMENOTNULL,statusVARCHAR(10)NOTNULLCHECK(statusIN('未支付','已支付','已退款')),

温馨提示

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

最新文档

评论

0/150

提交评论