版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL高频面试题及真实答案(企业实操版)本次面试题适配初级、中级开发、测试、数据岗位,所有题目为互联网企业高频真题,答案贴合实际业务开发场景,摒弃书面化套话,通俗易懂、可直接落地。一、基础SQL面试题(必问)1、简述SQL常用的分类及核心作用?答案:日常工作中主要用到四类,覆盖所有业务操作:1.DQL(数据查询语言):核心是查询数据,最常用,关键字select、from、where、orderby、groupby等,日常80%的SQL操作都是查询。2.DML(数据操作语言):用来增删改表中数据,关键字insert、update、delete,操作后数据会变更,需要谨慎执行。3.DDL(数据定义语言):用来定义和修改数据库、表结构,关键字create、alter、drop、truncate,执行后会修改表结构,无法回滚。4.DCL(数据控制语言):用来管理权限和事务,关键字grant、revoke、commit、rollback,主要用于数据库权限管控和数据事务控制。2、delete、truncate、drop的区别是什么?工作中怎么选用?答案:三者核心差异在操作对象、是否可回滚、速度、是否保留结构,是面试高频重点:1.delete:只删除表数据,保留表结构,属于DML语句,可以加where条件精准删除,事务内可回滚,删除大量数据速度较慢。日常清理少量数据、精准删除业务数据优先用这个。2.truncate:清空整张表所有数据,保留表结构,属于DDL语句,无法回滚,不能加where条件,执行速度极快。适合清空测试表、临时表的全部数据。3.drop:直接删除整张表,包括数据和表结构、索引、约束,属于DDL语句,无法回滚,执行后表彻底消失。仅用于废弃表、无用数据表的彻底删除。3、where和having的区别?能不能互换使用?答案:二者不能互换,核心区别是筛选时机和筛选对象不同:1.where:分组之前筛选原始数据,针对行数据筛选,不支持聚合函数(sum、count、max等),可以单独使用。2.having:分组之后筛选分组后的结果,针对聚合结果筛选,支持聚合函数,必须配合groupby使用,不能单独使用。简单总结:先where过滤原始数据,再groupby分组,最后having过滤分组结果。示例:统计部门人数大于3人的部门
selectdept_id,count(*)asnumfromuserwherestatus=1groupbydept_idhavingnum>3;4、union和unionall的区别?工作中优先用哪个?答案:1.union:合并两个查询结果集,会自动去重,同时对结果进行排序,性能较差。2.unionall:直接拼接两个结果集,不做去重、不排序,性能远高于union。工作中优先使用unionall,只有业务明确需要去重时,才使用union。绝大多数业务场景数据本身无重复,无需额外去重排序。5、orderby排序为空值时,null是排前面还是后面?答案:以MySQL为例:1.正序(asc):null值默认排在最前面;2.倒序(desc):null值默认排在最后面。如果业务需要自定义null值排序位置,可以手动处理,比如orderby(fieldisnull),fielddesc。二、进阶SQL面试题(中高级必问)1、leftjoin、rightjoin、innerjoin、fulljoin的区别?答案:1.innerjoin(内连接):只返回两张表中匹配成功的数据,两边无匹配的数据直接过滤掉,是最常用的连接方式。2.leftjoin(左连接):以左表为基准,左表所有数据全部保留,右表匹配不到的字段显示null。日常业务查询使用最多,适合查询主表全部数据、关联附表信息的场景。3.rightjoin(右连接):以右表为基准,右表数据全部保留,左表匹配不到显示null,工作中极少使用,可直接改成左连接实现。4.fulljoin(全连接):返回左右两张表的所有数据,匹配不上的字段补null,MySQL不支持全连接,一般用unionall拼接左右连接结果替代。2、SQL执行顺序是什么?为什么聚合函数不能写在where里?答案:标准SQL执行顺序(重中之重):
from>where>groupby>聚合计算>having>select>orderby>limit因为where的执行时机在groupby和聚合函数之前,此时还没有完成分组和数据统计,没有聚合结果,所以无法识别聚合函数。而having在聚合执行后执行,所以可以使用聚合函数。3、什么是子查询?相关子查询和无关子查询的区别?答案:子查询就是嵌套在主查询中的查询语句,分为两种:1.无关子查询(普通子查询):子查询独立执行,不依赖主查询的数据,只执行一次,速度快。比如select*fromuserwheredept_idin(selectidfromdept);2.相关子查询:子查询依赖主查询的每一行数据,主查询遍历一行,子查询就执行一次,数据量大时性能极差,工作中尽量用join连接替代。4、limit分页为什么深度分页会慢?怎么优化?答案:问题原因:limit10000,10的执行逻辑是先查询前10010条数据,舍弃前10000条,只返回后10条。分页越深,需要扫描的数据越多,IO开销越大,速度越慢。优化方案:1.主键索引分页:利用自增主键,whereid>10000limit10,避免扫描大量无效数据;2.延迟关联:先通过索引查出主键,再关联查询完整数据;3.业务层面限制:前端禁止深度分页,只提供上拉加载、页码有限展示。5、distinct去重的原理和缺点?有什么替代方案?答案:原理:distinct会对查询的所有字段进行分组比对,通过排序完成去重。缺点:性能差,大数据量下排序开销极大,容易拖慢SQL执行。替代方案:业务场景允许的情况下,用groupby分组替代distinct,性能更优;精准去重可根据唯一字段过滤。三、索引与性能优化面试题(核心高频)1、什么是索引?索引的优缺点?答案:索引是数据库为表字段建立的结构化目录,类似书籍目录,用于快速检索数据。优点:极大提升查询、筛选、排序、分组的效率,减少数据库扫描行数。缺点:1.占用磁盘存储空间;2.降低增删改的效率,数据变更时需要同步更新索引结构;3.索引过多会加重数据库负担。2、最左前缀原则是什么?联合索引怎么建立才合理?答案:最左前缀原则:建立联合索引(a,b,c)时,查询条件必须命中最左侧连续字段,索引才会生效。生效场景:wherea=?、wherea=?andb=?、wherea=?andb=?andc=?失效场景:whereb=?、wherec=?、whereb=?andc=?联合索引建索引原则:高频查询字段在前、区分度高的字段在前、排序分组字段在后。3、哪些场景会导致索引失效?答案:工作中最常见的索引失效场景:1.对索引字段做运算、函数操作(like'%xxx'、date()、+、-等);2.隐式类型转换,比如字符串字段传数字、数字字段传字符串;3.使用or连接条件,左右字段一个有索引一个无索引;4.违背最左前缀原则;5.MySQL判断全表扫描比索引查询更快时,会自动放弃索引(数据量极少、数据倾斜场景)。4、覆盖索引是什么?有什么作用?答案:覆盖索引指查询的所有字段,全部包含在建立的索引中,数据库无需回表查询原始数据,直接通过索引返回结果。作用:避免回表操作,大幅提升查询性能,是日常优化SQL最常用的手段。示例:建立索引(name,age),查询selectname,agefromuserwherename='张三',即为覆盖索引。四、业务实战SQL面试题(手写SQL)通用测试表(所有题目共用):
用户表user(id,name,dept_id,salary,create_time,status)
部门表dept(id,dept_name)1、查询每个部门的员工人数、最高工资、最低工资,包含无人的部门答案:sql
SELECT
d.iddept_id,
d.dept_name,
COUNT(u.id)user_num,
MAX(u.salary)max_salary,
MIN(u.salary)min_salary
FROMdeptd
LEFTJOINuseruONd.id=u.dept_idANDu.status=1
GROUPBYd.id,d.dept_name;2、查询工资高于本部门平均工资的所有员工信息答案:sql
SELECT*FROMuseru1
WHEREu1.status=1
ANDu1.salary>(
SELECTAVG(u2.salary)FROMuseru2
WHEREu2.dept_id=u1.dept_idANDu2.status=1
);3、删除表中重复数据,保留id最小的一条答案:假设name为重复字段sql
DELETEu1FROMuseru1
JOINuseru2
ON=ANDu1.id>u2.id;4、统计近30天每日的新增用户数,无数据日期补0答案:sql
SELECT
date_day,
COUNT(u.id)new_user_num
FROM(
SELECTDATE_SUB(CURDATE(),INTERVALt.numDAY)date_day
FROMmysql.help_topict
WHEREt.num<30
)day_list
LEFTJOINuseru
ONDATE(u.create_time)=day_list.date_dayANDu.status=1
GROUPBYday_list.date_day
ORDERBYday_list.date_day;五、事务与数据库高频题1、数据库事务四大特性(ACID)?答案:1.原子性(A):事务是最小执行单元,要么全部执行成功,要么全部回滚,不会出现部分成功部分失败的情况。2.一致性(C):事务执行前后,数据库数据完整性、约束规则保持一致,不会出现数据错乱。3.隔离性(I):多个事务并发执行时,相互隔离、互不干扰。4.持久性(D):事务提交成功后,数据永久落地,即使服务器宕机,数据也不会丢失。2、MySQL四种事务隔离级别及对应问题?答案:从低到高依次:1.读未提交:可以读取其他事务未提交数据,存在脏读、不可重复读、幻读问题,基本不用。2.读已提交(Oracle默认):只能读取已提交数据,解决脏读,存在不可重
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (2026年)医师分层次培训计划
- (2026年)维修电工高级技师理论知识试卷附答案
- 蒸呢机挡车工岗前班组管理考核试卷含答案
- 管模维修工持续改进知识考核试卷含答案
- 称重计量工操作技能测试考核试卷含答案
- 伞制作工岗前安全应急考核试卷含答案
- 机制地毯挡车工安全培训效果强化考核试卷含答案
- 海洋浮标工岗位知识体系考核试卷含答案
- 汽车车身整形修复工岗位实操综合知识考核试卷含答案
- 牙骨雕刻工技术综合竞赛考核试卷含答案
- 恶性高热急救指南2026
- 2026新教材语文 13 普罗米修斯 教学课件
- 2026年市政工程质量员专业技能考试必考题库与答案
- 2026年财务数字化财务机器人应用培训试卷及答案
- T-CCMA 0055-2017 工程机械液压管路布局规范
- VDA 6.3 过程审核 2023 版 中文版(完整原文 + 评分细则 + 现场审核清单)
- 2026年(综合知识测试)湖北省从村(社区)干部中定向考录乡镇(街道)公务员综合试题及答案
- 2026年在线监测设备运维考试题及答案
- 居间股权转让合同范本
- 第七章健康地生活测试卷 (2)2026-2027学年人教版八年级上册生物
- 矿山含泥废水沉淀方案
评论
0/150
提交评论