版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL面试高频真题及详细答案(实战版)本套题库为企业面试高频原题,涵盖SQL基础、进阶查询、联表、子查询、函数、索引、性能优化核心考点,适配初级、中级开发/测试/数据分析岗位,答案简洁实用、贴合工程实战。一、基础查询类(入门必考)题目1:去重查询现有用户表user,字段:id(主键)、username(用户名)、age(年龄)、city(城市)。请查询所有用户所在的不重复城市。答案:sql
--DISTINCT实现单列去重
SELECTDISTINCTcityFROMuser;解析:DISTINCT关键字用于去除查询结果中的重复数据,仅保留唯一值,仅对其后紧跟的所有字段组合生效。题目2:条件筛选与排序基于上述user表,查询年龄在18-30岁之间、所在城市为北京的用户,结果按年龄降序、id升序排列。答案:sql
SELECTid,username,age,city
FROMuser
WHEREageBETWEEN18AND30ANDcity='北京'
ORDERBYageDESC,idASC;解析:BETWEEN包含首尾数值,ORDERBY多字段排序优先级从左到右,DESC为降序,ASC为升序(默认可省略)。题目3:模糊查询查询用户名包含“张”字的所有用户,以及用户名以“李”开头的用户。答案:sql
--%匹配任意任意字符(包括空),_匹配单个字符
SELECT*FROMuserWHEREusernameLIKE'%张%'ORusernameLIKE'李%';解析:模糊查询必须使用LIKE关键字,%为通配符,适配前后模糊匹配;_仅匹配一个字符,适合精准位数模糊查询。二、分组聚合类(面试高频)题目4:分组统计+条件过滤订单表order,字段:order_id(订单ID)、user_id(用户ID)、amount(订单金额)、create_time(下单时间)、status(订单状态)。统计每个用户的下单总金额,只展示总金额大于1000的用户。答案:sql
SELECTuser_id,SUM(amount)AStotal_amount
FROM`order`
GROUPBYuser_id
HAVINGtotal_amount>1000;重点解析(面试必问区别):1.WHERE是分组前过滤,过滤原始数据,不能用聚合函数;2.HAVING是分组后过滤,过滤分组统计结果,支持聚合函数;3.关键字执行顺序:WHERE>GROUPBY>HAVING>ORDERBY。题目5:统计各类数据数量基于order表,统计2025年每个月的订单总数、成交总金额,按月份升序排列。答案:sql
SELECTDATE_FORMAT(create_time,'%Y-%m')ASmonth,
COUNT(order_id)ASorder_count,
SUM(amount)AStotal_money
FROM`order`
WHEREcreate_time>='2025-01-01'ANDcreate_time<'2026-01-01'
GROUPBYmonth
ORDERBYmonthASC;三、联表查询类(核心难点)基础表说明:1.用户表user:id、username、age、city2.订单表order:order_id、user_id、amount、create_time、status题目6:左连接查询查询所有用户的用户名、对应订单金额,包括从未下单的用户(订单信息显示为空)。答案:sql
SELECTu.username,o.amount
FROMuseru
LEFTJOIN`order`oONu.id=o.user_id;联表区别解析:1.LEFTJOIN(左连接):保留左表所有数据,右表无匹配数据显示NULL;2.RIGHTJOIN(右连接):保留右表所有数据,左表无匹配数据显示NULL;3.INNERJOIN(内连接):只展示两表匹配的数据,无匹配则不展示。题目7:查询无订单的用户筛选出所有从未下过订单的用户ID、用户名。答案(两种常用写法):写法1:左连接+判空(效率更高)sql
SELECTu.id,u.username
FROMuseru
LEFTJOIN`order`oONu.id=o.user_id
WHEREo.order_idISNULL;写法2:NOTIN子查询sql
SELECTid,usernameFROMuser
WHEREidNOTIN(SELECTDISTINCTuser_idFROM`order`);四、子查询与分页类题目8:分页查询查询用户表第3-5条数据(每页2条,第二页数据),按id升序排列。答案:sql
SELECT*FROMuserORDERBYidASCLIMIT2,2;解析:LIMIT偏移量,条数;偏移量从0开始,LIMIT2,2代表跳过前2条,取后2条。题目9:子查询获取最大值数据查询订单金额最高的一条订单记录。答案:sql
SELECT*FROM`order`
WHEREamount=(SELECTMAX(amount)FROM`order`);五、SQL函数面试题题目10:NULL值处理订单表中部分amount字段为NULL,请查询所有订单金额,NULL值替换为0。答案:sql
SELECTorder_id,IFNULL(amount,0)ASamountFROM`order`;解析:IFNULL(字段,默认值),MySQL专属,用于替换NULL值;Oracle使用NVL,SQLServer使用ISNULL。题目11:字符串拼接拼接用户用户名和城市,格式:张三-北京。答案:sql
SELECTCONCAT(username,'-',city)ASuser_infoFROMuser;六、数据库基础与索引面试题(问答+实操)题目12:主键、唯一索引、普通索引的区别详细答案:1.主键索引(PRIMARYKEY):非空且唯一,一张表只能有一个主键,主键自带索引,InnoDB引擎主键是聚簇索引。2.唯一索引(UNIQUE):字段值唯一,允许为NULL(可多个NULL),一张表可以有多个唯一索引。3.普通索引(INDEX):最基础的索引,无唯一性约束,仅用于提升查询速度,允许重复值、NULL值。题目13:什么是聚簇索引和非聚簇索引?区别是什么?详细答案:1.聚簇索引:索引和数据存储在一起,叶子节点直接存储整行数据。InnoDB主键就是聚簇索引,一张表只有一个聚簇索引。2.非聚簇索引(二级索引):索引和数据分离,叶子节点只存储索引字段和主键ID,查询数据需要先查索引、再通过主键回表查询数据。核心区别:聚簇索引直接存数据,查询效率更高;非聚簇索引需要回表查询,效率略低。题目14:索引失效的常见场景(面试高频)详细答案:1.索引字段使用函数、运算、类型转换;2.LIKE以%开头(如%张三),前缀模糊查询失效;3.OR连接的字段有一个无索引;4.复合索引不遵循最左前缀原则;5.MySQL优化器判断全表扫描比索引查询更快,主动放弃索引;6.NULL值过多、数据重复率极高,索引失效。题目15:复合索引最左前缀原则答案:复合索引(a,b,c),查询条件必须包含最左侧的a字段,索引才会生效。有效场景:wherea=?、wherea=?andb=?、wherea=?andb=?andc=?失效场景:whereb=?、wherec=?、whereb=?andc=?七、SQL优化面试题(实战必考)题目16:日常SQL优化常用手段详细答案:1.禁止使用SELECT*,只查询需要的字段,减少数据传输;2.合理建立索引,高频查询字段建索引,避免过度索引(索引影响增删改效率);3.避免索引失效场景,杜绝字段运算、函数查询;4.大表分页优化,避免LIMIT大偏移量;5.优先使用内连接,减少左连接、全表扫描;6.合理拆分大SQL,避免单条SQL逻辑过于复杂;7.对高频分组、排序字段建立索引。题目17:LIMIT10000,10分页慢怎么优化?详细答案:原因:大偏移量需要先扫描前10000条数据,再丢弃,耗时极高。优化方案:通过主键索引精准定位,避免全量扫描sql
--低效写法
SELECT*FROMuserLIMIT10000,10;
--优化写法
SELECT*FROMuserWHEREid>10000LIMIT10;八、经典难题(面试拔高)题目18:查询每部门薪资最高的员工员工表emp:id、name、dept_id(部门ID)、salary(薪资),查询每个部门薪资最高的员工信息。答案:sql
SELECTe.*
FROMempe
INNERJOIN(
SELECTdept_id,MAX(salary)ASmax_salary
FROMemp
GROUPBY
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (新)专科护士培训计划2篇
- (2026年)年单片机原理及应用期末考试题试卷及答案
- 气焊工岗前岗位适应能力考核试卷含答案
- 力学计量员岗前评审考核试卷含答案
- 个人信息保护合规管理员风险识别强化考核试卷含答案
- 甘油精制工安全演练能力考核试卷含答案
- 贴剂工风险评估与管理知识考核试卷含答案
- 化工总控工安全生产知识测试考核试卷含答案
- 有机实芯电阻器、电位器制造工变更管理强化考核试卷含答案
- 漆艺师岗位水平知识考核试卷含答案
- 管理沟通(第7版)课件 第06章-教材版 会议沟通
- 2026年网信办网络舆情管理岗笔试真题(含答案)
- 2024 人身保险伤残评定及代码
- 中铝集团竞聘笔试题库及答案
- 《论语》十二章考点复习资料汇编
- 400个小学英语高频固定搭配大全
- 学堂在线 批判性思维-方法和实践 章节测试答案
- 承台和地梁一体施工方案
- (2025年标准)更换玻璃维修协议书
- 文明丧葬规则解读
- 人教版小学五年级道德与法治下册第一单元测试题
评论
0/150
提交评论