版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL高频面试题及详细答案(实战版)一、基础SQL面试题(入门必问)1、简述SQL的常用分类及核心语句SQL主要分为四大类,日常开发、面试最常用的是前两类:1)DQL(数据查询语言):核心用于查询数据,使用频率最高,核心语句:SELECT、FROM、WHERE、ORDERBY、LIMIT、GROUPBY2)DML(数据操作语言):用于操作表中数据,增删改,核心语句:INSERT、UPDATE、DELETE3)DDL(数据定义语言):用于定义、修改数据库和表结构,核心语句:CREATE、ALTER、DROP、TRUNCATE4)DCL(数据控制语言):用于权限管理,核心语句:GRANT、REVOKE补充区别:TRUNCATE和DELETE的核心差异是高频考点,DELETE是逐行删除数据,可回滚、不释放表空间;TRUNCATE是清空整张表数据,不可回滚、快速释放空间,且不会触发触发器。2、SELECT语句的完整执行顺序是什么?这是面试高频基础考点,书写顺序和数据库实际执行顺序不同,实际执行顺序:FROM→WHERE→GROUPBY→HAVING→SELECT→DISTINCT→ORDERBY→LIMIT通俗解释:先确定查询的表,再过滤行数据,接着分组,筛选分组后的结果,再查询字段、去重,最后排序、截取条数。核心注意:WHERE在分组前过滤,不能用聚合函数;HAVING在分组后过滤,可以使用聚合函数。3、WHERE和HAVING的区别?1)执行时机不同:WHERE是分组之前过滤单条数据;HAVING是分组之后过滤分组后的整体数据2)使用范围不同:WHERE不能使用SUM、COUNT、MAX等聚合函数;HAVING专门搭配聚合函数使用3)优先级不同:WHERE执行效率更高,优先用WHERE过滤无效数据,减少分组数量,提升查询性能示例:查询班级人数大于30人的班级SELECTclass_id,COUNT(*)ASnumFROMstudentGROUPBYclass_idHAVINGnum>30;4、DISTINCT的作用及使用注意事项作用:对查询结果进行整行去重,不是针对单个字段。注意点:1)DISTINCT写在所有查询字段最前面,作用于全部字段组合2)多个字段去重时,只有所有字段数据完全一致,才会被判定为重复数据3)性能较差,会全表扫描、排序去重,大数据量场景尽量少用,可通过业务逻辑提前去重5、UNION和UNIONALL的区别?1)去重差异:UNION会自动去除合并后的重复数据;UNIONALL直接拼接所有结果,不去重2)性能差异:UNION需要排序去重,效率低;UNIONALL无需排序,效率远高于UNION3)使用场景:确定数据无重复时,优先用UNIONALL;需要自动去重时使用UNION通用要求:两个查询语句的字段数量、字段类型必须一致。二、进阶SQL面试题(联表、索引、函数)1、简述常用的联表查询类型及区别日常工作最常用4种联表方式,以左表A、右表B为例:1)INNERJOIN(内连接):只查询两张表中匹配成功的数据,两边无匹配的数据全部过滤2)LEFTJOIN(左连接):以左表为基准,查询左表所有数据,右表匹配不到的字段填充NULL3)RIGHTJOIN(右连接):以右表为基准,查询右表所有数据,左表匹配不到的字段填充NULL4)FULLJOIN(全连接):查询左右两表所有数据,无匹配的字段填充NULL(MySQL不支持,可通过UNION拼接实现)工作高频场景:90%的联表查询使用LEFTJOIN,避免丢失主表数据。2、JOIN和子查询的优劣对比,什么时候用哪种?1)JOIN联表查询:优势:数据库优化器会自动优化联表逻辑,索引生效率高,大数据量下性能更好,可读性强劣势:多表联表过多时(超过3张),逻辑复杂,容易出现笛卡尔积,性能下降2)子查询:优势:逻辑简单清晰,适合简单的嵌套查询,代码简洁劣势:部分子查询无法使用索引,大数据量效率低,嵌套过深可读性极差使用原则:多表查询优先JOIN;简单单表嵌套、少量数据查询用子查询;禁止三层以上嵌套子查询。3、MySQL索引的分类及失效场景(高频重点)索引分类:1)普通索引:最基础索引,无唯一性限制,允许NULL值2)唯一索引:字段值唯一,允许一个NULL值3)主键索引:特殊的唯一索引,不允许NULL、不允许重复,一张表只能有一个主键4)联合索引:多个字段组合的索引,遵循最左前缀原则5)全文索引:用于长文本模糊查询常见索引失效场景:1)联合索引不满足最左前缀原则,跳过左侧字段直接查询右侧字段2)索引字段使用函数、运算、类型转换,如WHEREDATE(create_time)='2026-01-01'3)使用!=、<>、NOTIN、NOTLIKE反向查询4)LIKE以%开头模糊查询,如'%张三'5)OR连接查询,前后字段未全部建立索引6)MySQL判断全表扫描比索引查询更快时,会自动放弃索引4、什么是联合索引最左前缀原则?联合索引(a,b,c),索引生效的前提是遵循最左匹配,从最左侧字段开始连续匹配。生效场景:a、a+b、a+b+c失效场景:b、c、b+c、a+c(跳过中间字段,后续索引全部失效)业务优化:建立联合索引时,将查询频率最高、筛选性最强、非空的字段放在最左侧。5、NULL值查询有哪些坑?如何处理?1)坑1:NULL和任何值运算、对比结果都是NULL,不能用=NULL、!=NULL查询正确写法:ISNULL、ISNOTNULL2)坑2:GROUPBY会将所有NULL值归为同一组3)坑3:索引字段存在大量NULL值,会导致索引失效,NULL值不占用索引空间优化方案:字段尽量设置NOTNULL,默认值设为空字符串、0等,避免NULL值。三、实战场景面试题(手写SQL)通用测试表(所有实战题目基于以下两张表)学生表student(student_id主键,student_name,class_id,score,create_time)班级表class(class_id主键,class_name,teacher_name)1、查询每个班级的学生人数、平均分,按人数降序排序解题思路:按班级分组,使用COUNT统计人数、AVG计算平均分,最后排序sql
SELECT
class_id,
COUNT(student_id)ASstudent_num,
ROUND(AVG(score),2)ASavg_score
FROMstudent
GROUPBYclass_id
ORDERBYstudent_numDESC;2、查询平均分大于80分的班级ID和平均分解题思路:分组后过滤聚合结果,必须用HAVINGsql
SELECT
class_id,
ROUND(AVG(score),2)ASavg_score
FROMstudent
GROUPBYclass_id
HAVINGavg_score>80;3、查询所有学生的姓名、班级名称、班主任姓名(联表查询)解题思路:以学生表为主表,左连接班级表,保证所有学生数据不丢失sql
SELECT
s.student_name,
c.class_name,
c.teacher_name
FROMstudents
LEFTJOINclasscONs.class_id=c.class_id;4、查询成绩排名前三的学生信息(去重排名)sql
SELECT*
FROMstudent
ORDERBYscoreDESC
LIMIT3;5、查询各班成绩最高分的学生信息(经典分组取最值)sql
SELECTs.*
FROMstudents
INNERJOIN(
SELECTclass_id,MAX(score)ASmax_score
FROMstudent
GROUPBYclass_id
)tONs.class_id=t.class_idANDs.score=t.max_score;四、性能优化面试题(高阶必问)1、日常SQL优化的核心思路有哪些?1)优化索引:高频查询字段建索引,合理使用联合索引,避免索引失效场景2)优化查询语句:禁止SELECT*,只查询需要的字段;优先用WHERE过滤数据,减少分组、联表数据量3)优化联表:减少联表数量,禁止三张以上表关联;优先LEFTJOIN,避免无效笛卡尔积4)避免低效语句:杜绝大量DISTINCT、子查询嵌套、OR多条件查询、模糊前置匹配5)大表优化:大表分页用延迟分页;超大表分库分表、冷热数据分离2、SELECT*为什么不推荐使用?1)查询多余字段,增加数据库IO、网络传输压力,降低查询效率2)无法使用覆盖索引,触发回表查询,大幅降低性能3)表结构变更后,多余字段会导致程序数据解析异常,兼容性差3、分页查询越往后越慢的原因及优化方案原因:MySQL分页LIMITn,m原理是先查询前n+m条数据,再丢弃前n条,页码越大,扫描的数据越多,耗时越长。优化方案:1)延迟分页:先通过主键索引查询出目标ID,再关联查询数据,避免全表扫描2)业务限制:前端限制最大分页页码,禁止用户查询超大页码数据3)主键自增有序数据:用WHEREid>上一页最大IDLIMITm替代传统分页五、事务与锁基础面试题1、数据库事务的四大特性(ACID)1)原子性(A):事务是最小执行单元,要么全部执行成功,要么全部回滚失败2)一致性(C):事务执行前后,数据库数据完整性、约束规则保持一致3)隔离性(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 无烟净化施工方案范本(3篇)
- 暑假营地露营活动方案策划(3篇)
- 杭州江干区营销方案策划(3篇)
- 桥墩基础破除施工方案(3篇)
- 武鸣新年风俗活动策划方案(3篇)
- 安全应急疏散演练
- 初中二年级物理《光的传播》教案
- 无创正压通气护理技术
- 安全员工作情况
- 广东广州市2026年普通高中毕业班综合测试英语试题(解析版)(一)
- 2026年广西北部湾国际港务集团有限公司人员招聘笔试参考试题及详细答案解析
- 成人吞咽障碍患者口服给药护理
- 高级经济师房地产与建筑经济真题及答案
- 军士专升本试题及答案
- 2026年高考全国二卷理科综合真题试卷(+答案)
- T∕CDSIA 0003-2025 家具行业数字化建设指南
- 医院IT信息科招聘笔试题及答案
- 恒力集团考核制度
- 药物性肾损害预防与监测方案
- 胸腔镜下肺大泡切除术后护理查房
- 急诊取栓流程
评论
0/150
提交评论