2025年sql笔试考试题及答案_第1页
2025年sql笔试考试题及答案_第2页
2025年sql笔试考试题及答案_第3页
2025年sql笔试考试题及答案_第4页
2025年sql笔试考试题及答案_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

2025年sql笔试考试题及答案一、单项选择题(每题2分,共20分)1.以下关于事务ACID特性的描述,错误的是()A.原子性(Atomicity)要求事务中的操作要么全部完成,要么全部不完成B.一致性(Consistency)确保事务执行后数据库从一个有效状态转移到另一个有效状态C.隔离性(Isolation)指多个事务并发执行时,每个事务感觉不到其他事务的存在D.持久性(Durability)要求事务提交后,数据变更仅保留在内存中直至下次重启答案:D(持久性要求变更必须持久化到存储设备,而非仅内存)2.某表结构为`user_info(user_idINTPRIMARYKEY,usernameVARCHAR(50),reg_timeDATETIME,last_loginDATETIME)`,需查询2024年1月1日之后注册且最近一次登录在2024年12月31日之后的用户,正确的WHERE子句是()A.WHEREreg_time>'2024-01-01'ANDlast_login>'2024-12-31'B.WHEREreg_time>='2024-01-01'ORlast_login>='2024-12-31'C.WHEREreg_timeBETWEEN'2024-01-01'AND'2024-12-31'D.WHEREreg_time>'2024-01-01'ORlast_login>'2024-12-31'答案:A(需同时满足两个条件,用AND连接)3.以下关于索引的说法,正确的是()A.主键索引一定是唯一索引,但唯一索引不一定是主键索引B.为所有列添加索引可以最大程度提升查询性能C.复合索引的顺序不影响查询效率,只需包含查询条件中的列即可D.索引会完全避免全表扫描答案:A(主键自动创建唯一索引,唯一索引允许NULL且可有多列,主键不允许NULL且唯一)4.执行`SELECTCOUNT(),COUNT(user_id)FROMorder_infoWHEREuser_idISNULL`,假设表中有10条user_id为NULL的记录,其他字段无NULL,结果为()A.10,10B.10,0C.0,10D.0,0答案:B(COUNT()统计所有行,COUNT(user_id)统计user_id非NULL的行,此处user_id全为NULL,故为0)5.对于表`employee(dept_idINT,salaryDECIMAL)`,需查询各部门平均工资高于全公司平均工资的部门,正确的SQL是()A.SELECTdept_id,AVG(salary)FROMemployeeGROUPBYdept_idHAVINGAVG(salary)>(SELECTAVG(salary)FROMemployee)B.SELECTdept_id,AVG(salary)FROMemployeeGROUPBYdept_idWHEREAVG(salary)>(SELECTAVG(salary)FROMemployee)C.SELECTdept_id,AVG(salary)FROMemployeeWHEREAVG(salary)>(SELECTAVG(salary)FROMemployee)GROUPBYdept_idD.SELECTdept_id,AVG(salary)FROMemployeeGROUPBYdept_idHAVINGAVG(salary)>AVG(salary)答案:A(HAVING子句用于过滤分组后的聚合结果,子查询获取全公司平均工资)6.以下关于窗口函数的说法,错误的是()A.窗口函数使用OVER()子句定义窗口范围B.ROW_NUMBER()会为相同值的行分配不同的序号C.RANK()在相同值的行后会跳过序号(如1,1,3)D.DENSE_RANK()在相同值的行后不会跳过序号(如1,1,2)答案:C(RANK()相同值行序号相同,后续序号跳过,如1,1,3;DENSE_RANK()不跳过,如1,1,2)7.表`orders(order_idINT,user_idINT,order_timeDATETIME,amountDECIMAL)`,需查询每个用户最近一次下单的订单金额,正确的SQL是()A.SELECTuser_id,amountFROM(SELECTuser_id,amount,ROW_NUMBER()OVER(PARTITIONBYuser_idORDERBYorder_timeDESC)ASrnFROMorders)tWHERErn=1B.SELECTuser_id,MAX(amount)FROMordersGROUPBYuser_idC.SELECTuser_id,amountFROMordersWHEREorder_time=MAX(order_time)GROUPBYuser_idD.SELECTuser_id,amountFROMordersGROUPBYuser_idHAVINGorder_time=MAX(order_time)答案:A(通过窗口函数按用户分区并按时间倒序排序,取序号1的记录)8.以下哪种JOIN操作会返回左表所有记录,右表匹配的记录,若右表无匹配则用NULL填充?()A.INNERJOINB.RIGHTJOINC.LEFTJOIND.FULLOUTERJOIN答案:C(LEFTJOIN保留左表所有行,右表无匹配时右表字段为NULL)9.执行`UPDATEuserSETage=age+1WHEREgender='男'`时,若表中存在3条gender为'男'的记录,其中1条age为NULL,最终这3条记录的age值分别为()A.NULL+1(报错),原age+1,原age+1B.NULL,原age+1,原age+1C.1,原age+1,原age+1D.0,原age+1,原age+1答案:B(NULL与任何数值运算结果仍为NULL,故原age为NULL的记录更新后仍为NULL)10.以下关于索引失效的场景,错误的是()A.查询条件使用函数(如WHEREYEAR(reg_time)=2024)B.复合索引的左列未被使用(如索引(age,name),查询条件为WHEREname='张三')C.查询条件使用ISNULL或ISNOTNULLD.查询条件使用=、IN、BETWEEN等操作符答案:D(=、IN、BETWEEN通常能有效利用索引,而函数、非左前缀、类型不匹配等会导致失效)二、填空题(每空2分,共20分)1.SQL中用于限制分组后结果的子句是______。答案:HAVING2.事务的隔离级别从低到高依次为:读未提交、______、可重复读、串行化。答案:读已提交3.若要将查询结果写入新表,可使用______语句。答案:SELECT...INTO4.窗口函数中,用于计算累计和的函数是______。答案:SUM()OVER()5.表`product(pidINT,pnameVARCHAR,categoryVARCHAR)`,若要统计每个分类下的商品数量,且只显示数量大于10的分类,SQL语句为:SELECTcategory,COUNT()AScntFROMproduct______category______cnt>10答案:GROUPBY;HAVING6.若要查询表中第11到20条记录(按id升序),MySQL中可用______子句。答案:LIMIT10OFFSET107.约束中,______用于保证列值唯一且不允许NULL。答案:PRIMARYKEY8.子查询分为关联子查询和______子查询,前者依赖外层查询的结果。答案:非关联9.视图是虚拟表,其数据______(填“存储”或“不存储”)在数据库中。答案:不存储10.索引分为聚集索引和非聚集索引,MySQL的InnoDB存储引擎中,主键索引是______索引。答案:聚集三、简答题(每题6分,共30分)1.简述LEFTJOIN和INNERJOIN的区别,并举例说明。答案:INNERJOIN仅返回两表中满足连接条件的记录;LEFTJOIN返回左表所有记录,右表无匹配时右表字段为NULL。例如,左表A有记录(1,'a')、(2,'b'),右表B有记录(1,'x'),INNERJOIN结果为(1,'a','x'),LEFTJOIN结果为(1,'a','x')、(2,'b',NULL)。2.什么是事务?为什么需要事务?答案:事务是一组原子性的数据库操作,要么全部成功,要么全部回滚。事务用于保证数据的一致性,例如银行转账(扣减A账户、增加B账户),若中间失败,事务回滚可避免数据不一致。3.索引的优缺点是什么?何时不建议使用索引?答案:优点:加速查询;缺点:增加写操作(INSERT/UPDATE/DELETE)开销,占用存储空间。不建议使用索引的场景:表数据量小、列更新频繁、列值重复率高(如性别列,只有男/女)。4.如何优化慢查询?请列举至少3种方法。答案:(1)为查询条件中的列添加索引;(2)避免在WHERE子句使用函数或表达式(如YEAR(date)=2024改为date>='2024-01-01');(3)优化JOIN顺序,小表驱动大表;(4)减少SELECT,只查询需要的列;(5)使用EXPLAIN分析执行计划,查看是否全表扫描或索引失效。5.简述窗口函数与聚合函数的区别。答案:聚合函数(如SUM、AVG)会将多行数据聚合为一行,减少结果行数;窗口函数为每行计算一个值(基于定义的窗口范围),不改变结果行数。例如,计算每个员工的工资与部门平均工资的差值时,窗口函数可保留所有员工记录,而聚合函数需先分组再关联。四、编程题(共30分)(注:以下题目基于电商数据库,表结构如下:)`user(user_idINTPRIMARYKEY,reg_timeDATETIME)`(用户表,记录用户ID和注册时间)`order(order_idINTPRIMARYKEY,user_idINT,order_timeDATETIME,amountDECIMAL)`(订单表,记录订单ID、用户ID、下单时间、金额)`order_item(order_idINT,product_idINT,quantityINT,priceDECIMAL)`(订单项表,记录订单关联的商品及数量、单价)1.(5分)查询2024年注册的用户数量。答案:SELECTCOUNT()ASuser_cntFROMuserWHEREreg_time>='2024-01-01'ANDreg_time<'2025-01-01';2.(6分)查询每个用户的首单时间(最早下单时间)和首单金额。答案:SELECTt.user_id,MIN(t.order_time)ASfirst_order_time,t.amountASfirst_order_amountFROM(SELECTo.user_id,o.order_time,o.amount,ROW_NUMBER()OVER(PARTITIONBYo.user_idORDERBYo.order_time)ASrnFROMordero)tWHEREt.rn=1;3.(7分)查询2024年第四季度(10-12月)销售额最高的前10个商品(需关联订单项表,销售额=数量×单价)。答案:SELECTduct_id,SUM(oi.quantityoi.price)ASsales_amountFROMorderoJOINorder_itemoiONo.order_id=oi.order_idWHEREo.order_time>='2024-10-01'ANDo.order_time<'2025-01-01'GROUPBYduct_idORDERBYsales_amountDESCLIMIT10;4.(6分)查询注册后30天内下单的用户数(即用户注册时间与首单时间间隔≤30天)。答案:WITHfirst_orderAS(SELECTuser_id,MIN(order_time)ASfirst_otFROMorderGR

温馨提示

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

评论

0/150

提交评论