版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2025年sql考试题及答案一、单项选择题(每题2分,共20分)1.现有订单表orders(order_idINT,user_idINT,order_timeDATETIME,amountDECIMAL(10,2)),需查询2024年11月用户下单金额超过2000元的记录,正确的WHERE条件是:A.WHEREorder_timeBETWEEN'2024-11-01'AND'2024-11-30'ANDamount>2000B.WHEREYEAR(order_time)=2024ANDMONTH(order_time)=11ANDamount>=2000C.WHEREorder_timeLIKE'2024-11%'ANDamount>2000D.WHEREorder_time>='2024-11-01'ANDorder_time<'2024-12-01'ANDamount>20002.关于SQL连接操作,以下说法正确的是:A.LEFTJOIN会返回右表所有记录,左表匹配的记录B.INNERJOIN的结果集行数一定小于等于左表行数C.FULLOUTERJOIN在MySQL中可通过LEFTJOIN+RIGHTJOIN+UNION实现D.CROSSJOIN会提供两表行数的乘积,无需ON条件3.执行以下语句后,变量@result的值是:SELECTCOUNT()INTO@resultFROM(SELECTDISTINCTuser_idFROMordersWHEREamount>100)ASt;A.订单金额大于100的记录数B.订单金额大于100的不同用户数C.所有用户的订单数D.订单金额大于100的用户下单次数总和4.某表结构为employee(emp_idINT,dept_idINT,salaryDECIMAL(10,2)),要查询各部门平均工资最高的前3个部门,正确的SQL是:A.SELECTdept_id,AVG(salary)ASavg_salaryFROMemployeeGROUPBYdept_idORDERBYavg_salaryDESCLIMIT3B.SELECTdept_id,AVG(salary)ASavg_salaryFROMemployeeGROUPBYdept_idHAVINGavg_salaryDESCLIMIT3C.SELECTdept_id,AVG(salary)ASavg_salaryFROMemployeeORDERBYavg_salaryDESCGROUPBYdept_idLIMIT3D.SELECTdept_id,AVG(salary)ASavg_salaryFROMemployeeGROUPBYdept_idORDERBYavg_salaryASCLIMIT35.关于索引,以下说法错误的是:A.唯一索引可以加速DISTINCT查询B.复合索引的顺序应遵循“最左匹配”原则C.对频繁更新的列建立索引会降低写操作性能D.全文索引适用于CHAR/VARCHAR类型的精确匹配查询6.事务中执行以下操作:BEGIN;UPDATEaccountSETbalance=balance100WHEREuser_id=1;UPDATEaccountSETbalance=balance+100WHEREuser_id=2;COMMIT;若第一条UPDATE成功,第二条UPDATE失败,最终结果是:A.两条更新都提交B.两条更新都回滚C.第一条提交,第二条回滚D.数据库进入异常状态7.现有表sales(sale_idINT,product_idINT,sale_dateDATE,quantityINT),要查询每个商品2024年各月累计销量,正确的窗口函数用法是:A.SELECTproduct_id,MONTH(sale_date)ASmonth,SUM(quantity)OVER(PARTITIONBYproduct_idORDERBYsale_dateROWSBETWEENUNBOUNDEDPRECEDINGANDCURRENTROW)AScumulativeB.SELECTproduct_id,MONTH(sale_date)ASmonth,SUM(quantity)OVER(ORDERBYproduct_id,sale_date)AScumulativeC.SELECTproduct_id,MONTH(sale_date)ASmonth,SUM(quantity)OVER(PARTITIONBYproduct_id,MONTH(sale_date))AScumulativeD.SELECTproduct_id,MONTH(sale_date)ASmonth,SUM(quantity)OVER(PARTITIONBYproduct_idORDERBYMONTH(sale_date)RANGEBETWEENUNBOUNDEDPRECEDINGANDCURRENTROW)AScumulative8.以下哪条语句可以创建存储过程,实现根据用户ID查询最近3个月订单:A.CREATEPROCEDUREGetRecentOrders(INuidINT)BEGINSELECTFROMordersWHEREuser_id=uidANDorder_time>=DATE_SUB(NOW(),INTERVAL3MONTH);ENDB.CREATEFUNCTIONGetRecentOrders(uidINT)RETURNSTABLEBEGINRETURNSELECTFROMordersWHEREuser_id=uidANDorder_time>=DATE_SUB(NOW(),INTERVAL3MONTH);ENDC.CREATEPROCEDUREGetRecentOrders(uidINT)ASBEGINSELECTFROMordersWHEREuser_id=uidANDorder_time>=DATE_SUB(CURRENT_DATE,INTERVAL3MONTH);ENDD.CREATEPROCEDUREGetRecentOrders(INuidINT)BEGINSELECTFROMordersWHEREuser_id=uidANDorder_time>=NOW()3MONTH;END9.执行EXPLAINSELECTFROMordersWHEREuser_id=123ANDstatus='completed'后,Extra列显示“Usingindexcondition”,说明:A.完全使用索引覆盖查询B.使用索引进行了部分条件过滤C.未使用索引,全表扫描D.使用了覆盖索引但未完全匹配10.关于JSON函数,以下能正确提取orders表中ext_info字段(JSON类型)里“delivery_address”值的是:A.SELECTJSON_EXTRACT(ext_info,'$.delivery_address')FROMordersB.SELECText_info->'delivery_address'FROMordersC.SELECTJSON_VALUE(ext_info,'delivery_address')FROMordersD.SELECTGET_JSON_VALUE(ext_info,'delivery_address')FROMorders二、填空题(每空2分,共20分)1.要将用户表中所有2000年前出生的用户年龄加1,SQL语句为:UPDATEusersSETage=age+1WHERE______<'2000-01-01';2.窗口函数中,ROW_NUMBER()与RANK()的区别是:当值相同时,ROW_NUMBER()______,RANK()______。3.创建一个视图v_user_orders,显示用户ID、姓名及2024年订单数量,语句为:CREATEVIEWv_user_ordersASSELECTu.user_id,u.username,______ASorder_countFROMusersuLEFTJOINordersoONu.user_id=o.user_idWHERE______GROUPBYu.user_id,u.username;4.事务的隔离级别中,______级别会导致幻读,______级别可以避免所有并发问题但性能最低。5.对表product的price列创建降序索引,语句为:CREATEINDEXidx_price_descONproduct(______);6.要查询每个用户的首单时间,可使用窗口函数______,按user_id分组并按order_time排序。三、简答题(每题6分,共30分)1.说明UNION与UNIONALL的区别,以及各自适用场景。2.简述索引失效的常见原因(至少列举4种)。3.解释视图的“可更新性”,并说明哪些视图不可更新。4.对比存储过程与函数的区别(至少3点)。5.简述慢查询优化的一般步骤。四、综合题(共30分)【背景】某电商公司数据库包含以下表:用户表users(user_idINTPRIMARYKEY,usernameVARCHAR(50),reg_timeDATETIME,user_levelTINYINT)订单表orders(order_idINTPRIMARYKEY,user_idINT,order_timeDATETIME,total_amountDECIMAL(10,2),statusTINYINTCOMMENT'1未支付,2已支付,3已取消')订单商品表order_items(item_idINTPRIMARYKEY,order_idINT,product_idINT,quantityINT,priceDECIMAL(10,2))商品表products(product_idINTPRIMARYKEY,product_nameVARCHAR(100),category_idINT,stockINT)要求:根据以下需求编写SQL语句。1.(8分)查询2024年Q4(10-12月)各商品分类的总销售额(销售额=数量×单价),结果按销售额降序排列,需显示分类ID、分类名称(假设分类表为categories,category_id主键,category_name字段)。2.(8分)查询2024年注册且下单次数超过3次的用户,显示用户ID、用户名、注册时间、下单次数,结果按下单次数降序排列。3.(7分)查询每个用户的最近一次支付订单(status=2)的详细信息(包括用户姓名、订单时间、订单总金额、商品名称、购买数量)。4.(7分)某商品(product_id=123)库存(stock)需预警:当库存≤安全库存(假设安全库存为100)时,需标记为“需补货”;库存≤50时标记为“紧急补货”。编写SQL查询该商品当前库存状态。答案一、单项选择题1.D2.C3.B4.A5.D6.B7.D8.A9.B10.A二、填空题1.birth_date2.提供唯一序号;提供相同序号并跳过后续序号3.COUNT(o.order_id);o.order_timeBETWEEN'2024-01-01'AND'2024-12-31'(或YEAR(o.order_time)=2024)4.读未提交(或读提交);可串行化5.priceDESC6.MIN(order_time)OVER(PARTITIONBYuser_idORDERBYorder_time)(或FIRST_VALUE(order_time)OVER(PARTITIONBYuser_idORDERBYorder_time))三、简答题1.区别:UNION会去重并排序,UNIONALL直接合并所有记录(包括重复)。适用场景:UNION用于需要唯一结果时;UNIONALL用于确认无重复或无需去重时,性能更高。2.常见原因:①查询条件使用函数/表达式(如WHEREYEAR(reg_time)=2024);②索引列使用!=或<>;③复合索引未遵循最左匹配;④字段类型隐式转换(如VARCHAR字段用数字查询未加引号);⑤LIKE以通配符开头(如WHEREnameLIKE'%张%');⑥OR条件中有未索引的列。3.可更新性:视图若基于单表且不包含聚合、DISTINCT、多表连接等,可通过视图更新基表数据。不可更新的视图包括:包含聚合函数(SUM/COUNT等)、GROUPBY/HAVING、DISTINCT、多表连接(非简单JOIN)、子查询、UNION/UNIONALL的视图。4.区别:①存储过程无返回值(或通过OUT参数返回),函数必须返回单个值;②存储过程可执行多个SQL语句,函数限制更严格(如不能修改表);③存储过程用CALL调用,函数可在SELECT中使用;④存储过程可控制事务,函数一般不能。5.优化步骤:①通过慢查询日志定位慢SQL;②使用EXPLAIN分析执行计划,查看是否全表扫描、索引使用情况;③检查是否存在不必要的字段查询(如SELECT);④优化查询条件(避免函数、隐式转换);⑤添加合适索引(复合索引、覆盖索引);⑥重构查询(如将子查询改为JOIN,拆分复杂查询);⑦考虑分表、分区或读写分离。四、综合题1.SELECTc.category_id,c.category_name,SUM(oi.quantityoi.price)AStotal_salesFROMcategoriescJOINproductspONc.category_id=p.category_idJOINorder_itemsoiONduct_id=duct_idJOINordersoONoi.order_id=o.order_idWHEREo.order_timeBETWEEN'2024-10-01'AND'2024-12-31'ANDo.status=2-仅统计已支付订单GROUPBYc.category_id,c.category_nameORDERBYtotal_salesDESC;2.SELECTu.user_id,u.username,u.reg_time,COUNT(o.order_id)ASorder_countFROMusersuJOINordersoONu.user_id=o.user_idWHEREu.reg_timeBETWEEN'2024-01-01'
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年文旅营销生产排程优化合同
- 村委换届选举工作制度
- 预警预测预防工作制度
- 领导包保单位工作制度
- 领导应急值守工作制度
- 黄土地上农业工作制度
- 平凉地区庄浪县2025-2026学年第二学期四年级语文第七单元测试卷(部编版含答案)
- 东营市垦利县2025-2026学年第二学期三年级语文第八单元测试卷(部编版含答案)
- 青岛市市南区2025-2026学年第二学期三年级语文第八单元测试卷(部编版含答案)
- 酒泉地区阿克塞哈萨克族自治县2025-2026学年第二学期三年级语文第八单元测试卷(部编版含答案)
- 高标农田建设标准劳务分包合同
- 眼科操作并发症及处理
- 5G华为优化中级认证考试题库(浓缩500题)
- 医院手术室净化系统维保方案
- QES管理体系审核检查表完整范例
- JGJT341-2014 泡沫混凝土应用技术规程
- 薄膜材料与技术(全套课件)上
- EPC总承包项目采购方案
- 51单片机读写SD卡程序实例完整版
- 人教新课标曹禺和语文教师谈《雷雨》
- 情绪压力管理与阳光心态
评论
0/150
提交评论