版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL面试题(高频真题+详细答案解析)本套面试题整理互联网、传统软件、大数据行业高频SQL面试考点,从基础语法到进阶优化,所有答案均为实操标准答案,解析通俗易懂,适配校招、初级开发、测试、数据分析师面试使用。一、SQL基础概念题1、简述SQL的常用分类及对应作用详细答案:SQL主要分为四大类,日常开发中最常用的是DML和DDL:1、DDL(数据定义语言):用于定义和修改数据库、表结构,不操作表数据。核心语句:CREATE(创建)、ALTER(修改)、DROP(删除)、TRUNCATE(清空表结构保留、清空数据)。2、DML(数据操作语言):用于操作数据表中的数据,是日常使用最多的语句。核心语句:SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除)。3、DCL(数据控制语言):用于权限管理。核心语句:GRANT(授权)、REVOKE(撤销权限)。4、TCL(事务控制语言):用于管理数据库事务。核心语句:COMMIT(提交事务)、ROLLBACK(回滚事务)、SAVEPOINT(保存点)。2、DELETE、TRUNCATE、DROP的区别?(高频必问)详细答案:三者核心区别在于操作对象、是否可回滚、是否删除结构、效率不同:1、DELETE:属于DML语句,只删除表中的数据,不删除表结构。可以带WHERE条件精准删除数据,事务中可回滚,删除后自增主键不会重置。适合精准删除部分数据。2、TRUNCATE:属于DDL语句,清空整张表所有数据,无法加WHERE条件。不支持事务回滚,执行后直接生效,会重置自增主键,执行效率远高于DELETE。适合清空整张表数据。3、DROP:属于DDL语句,直接删除整张表(数据+表结构+索引+约束),彻底销毁表,无法恢复,效率最高。适合彻底废弃数据表时使用。3、什么是数据库事务?事务的四大特性ACID分别是什么?详细答案:事务是数据库中一组不可分割的SQL执行单元,要么全部执行成功,要么全部执行失败回滚,保证数据操作的一致性。四大ACID特性:1、原子性(Atomicity):事务是最小执行单元,不可拆分,全部成功或全部失败。2、一致性(Consistency):事务执行前后,数据库数据完整性约束不变,数据状态合法。3、隔离性(Isolation):多个事务并发执行时,互相隔离,互不干扰。4、持久性(Durability):事务提交成功后,数据永久保存,即使服务器宕机,数据也不会丢失。4、数据库四大隔离级别及对应的脏读、不可重复读、幻读问题详细答案:隔离级别从低到高,安全性递增,性能递减:1、读未提交(ReadUncommitted):最低级别。允许读取其他事务未提交的数据,会产生脏读、不可重复读、幻读。基本不使用。2、读已提交(ReadCommitted):Oracle默认级别。只能读取其他事务已提交的数据,解决脏读,存在不可重复读、幻读。3、可重复读(RepeatableRead):MySQLInnoDB默认级别。保证同一事务多次读取同一数据结果一致,解决脏读、不可重复读,存在幻读。4、串行化(Serializable):最高级别。事务串行执行,完全隔离,解决所有并发问题,但性能极差,几乎不用。补充:InnoDB通过MVCC机制,在可重复读级别下,大部分场景可以规避幻读问题。二、SQL查询实操真题(附完整语句+解析)通用测试表(所有实操题基于以下两张表)学生表student(id,name,age,gender,class_id,create_time)班级表class(class_id,class_name,teacher_name)1、查询所有年龄大于18岁的男学生,按年龄降序排序,取前10条标准答案:sql
SELECTid,name,age,genderFROMstudent
WHEREage>18ANDgender='男'
ORDERBYageDESC
LIMIT10;详细解析:WHERE做条件筛选,ORDERBYageDESC实现年龄降序,LIMIT限制返回条数,是基础查询高频写法。2、查询每个班级的学生人数,显示班级ID、班级人数,人数从高到低排序标准答案:sql
SELECTclass_id,COUNT(id)ASstudent_num
FROMstudent
GROUPBYclass_id
ORDERBYstudent_numDESC;详细解析:GROUPBY按照班级分组,COUNT(id)统计每组学生数量,AS别名简化字段,最后排序展示。COUNT(id)不会统计NULL数据,比COUNT(*)更高效。3、查询学生人数大于5人的班级标准答案:sql
SELECTclass_id,COUNT(id)ASstudent_num
FROMstudent
GROUPBYclass_id
HAVINGstudent_num>5;详细解析:重点区分:WHERE过滤分组前的数据,HAVING过滤分组后的统计结果。分组后的条件必须用HAVING,不能用WHERE。4、联表查询:查询所有学生姓名、对应班级名称、班主任姓名标准答案:sql
SELECT,c.class_name,c.teacher_name
FROMstudents
LEFTJOINclasscONs.class_id=c.class_id;详细解析:使用左连接LEFTJOIN,保证所有学生数据都能展示,即使学生没有分配班级(class_id为NULL),学生数据也不会丢失。日常业务查询优先使用左连接。5、查询没有学生的班级标准答案:sql
SELECTc.class_id,c.class_name
FROMclassc
LEFTJOINstudentsONc.class_id=s.class_id
WHEREs.idISNULL;详细解析:以班级表为左表,关联学生表,关联后学生ID为空的班级,即为无学生的班级。6、去重查询:查询学生表中所有不重复的班级ID标准答案:sql
SELECTDISTINCTclass_idFROMstudent;详细解析:DISTINCT用于字段去重,适合少量字段去重场景。大量数据去重优先用GROUPBY,效率更高。三、SQL进阶函数真题1、说说WHERE和HAVING的区别详细答案:1、执行顺序:WHERE在分组(GROUPBY)之前执行,过滤原始数据;HAVING在分组之后执行,过滤分组后的统计数据。2、使用范围:WHERE不能使用聚合函数(COUNT、SUM、MAX等);HAVING支持聚合函数。3、效率:WHERE过滤数据更早,减少分组数据量,效率更高;能在WHERE过滤的条件绝不放到HAVING。2、COUNT(*)、COUNT(字段)、COUNT(1)的区别详细答案:1、COUNT(字段):统计该字段非NULL的数据行数,字段为NULL会被忽略。2、COUNT(*):统计整张表所有行数,包含NULL、重复数据,不会忽略任何行。3、COUNT(1):和COUNT(*)效果一致,统计所有行数。InnoDB引擎下,两者效率几乎无区别,日常开发通用COUNT(*)。3、UNION和UNIONALL的区别详细答案:1、UNION:合并多个查询结果,自动去重,自带排序,效率低。2、UNIONALL:直接拼接多个查询结果,不去重、不排序,效率远高于UNION。业务场景:确定数据无重复时,优先使用UNIONALL,提升查询性能。四、索引与SQL优化面试题(高频压轴)1、什么是索引?索引的优缺点详细答案:索引是数据库用于提升查询效率的磁盘数据结构,相当于数据表的目录。优点:极大提升查询、联表、排序、分组的效率。缺点:1、占用额外磁盘空间;2、降低增删改(INSERT/UPDATE/DELETE)效率,因为数据变更时需要同步更新索引结构;3、过多索引会增加数据库维护成本。2、MySQL常用索引类型及区别详细答案:1、主键索引(PRIMARYKEY):唯一且非空,一张表只能有一个主键索引,优先级最高。2、唯一索引(UNIQUE):字段值唯一,允许为NULL,一张表可以有多个唯一索引。3、普通索引(INDEX):最基础索引,无唯一性限制,仅用于提升查询效率。4、联合索引:多个字段组合的索引,遵循最左前缀原则,日常查询优化核心。3、什么是联合索引最左前缀原则?举例说明详细答案:联合索引(a,b,c),查询条件必须匹配左侧连续字段,索引才会生效。生效场景:wherea=?、wherea=?andb=?、wherea=?andb=?andc=?失效场景:whereb=?、wherec=?、whereb=?andc=?(跳过最左a字段,索引完全失效)核心总结:联合索引优先把高频查询、等值查询字段放在左侧。4、常见的索引失效场景(面试必考)详细答案:1、违反联合索引最左前缀原则。2、索引字段使用函数、运算、类型转换,例如:WHEREDATE(create_time)='2026-01-01'、WHEREage+1>18。3、使用!=、<>、NOTIN、NOTLIKE负向查询。4、LIKE以%开头模糊查询,例如:LIKE'%张三'。5、字符串字段不加引号,发生隐式类型转换。6、MySQL判断全表扫描比索引查询更快时,会自动放弃索引。5、日常SQL优化的常用手段详细答案:1、查询尽量避免SELECT*,只查询需要的字段,减少IO开销。2、合理建立索引,高频查询字段建索引,杜绝冗余索引。3、规避索引失效场景,避免字段运算、函数、左模糊查询。4、优先使用LEFTJOIN,避免子查询、嵌套查询,复杂场景用关联查询替代。5、大数据量分页使用LIMIT偏移量优化,避免LIMIT100000,10。6、能用WHERE过滤绝不放HAVING,提前缩小数据范围。五、高频面试难题(手撕真题)1、查询每个班级年龄最大的学生信息标准答案:sql
SELECTs.*
FROMstudents
INNERJOIN(
SELECTclass_id,MAX(age)ASmax_age
FROMstudent
GROUPBYclass_id
)tONs.class_id=t.class_idANDs.age=t.max_age;详细解析:先通过子查询统计每个班级的最大年龄,再通过班
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自流井工业园区(自贡高新技术产业园区自流井工业集中区)管理委员会2026年公开补充招聘园区产业发展服务专员考试备考试题及答案解析
- 2026重庆医科大学附属康复医院护理人员招聘4人考试模拟试题及答案解析
- 招聘1人!治多县完全小学教师招聘笔试参考题库及答案解析
- 2026年油印纸行业洞察报告及未来五至十年发展趋势报告
- 2026年专业公共卫生服务行业现状及趋势分析报告及未来五至十年AI赋能与效率革命
- 2026中国石油集团渤海钻探工程有限公司招聘283人考试模拟试题及答案解析
- 河南工程学院2026年高层次人才招聘笔试模拟试题及答案解析
- 2026年木地板制造行业深度研究报告及未来五至十年市场规模与增长潜力评估
- 2026湖北武汉商学院招聘司机岗3人笔试备考试题及答案解析
- 招聘1人!沈家寨中心卫生院公开招聘临床护士笔试模拟试题及答案解析
- 眼科编码课件
- 2025年10月自考07729仓储技术和库存理论试题及答案
- 金蝶软件销售合同范本
- 电疗操作知识培训内容总结课件
- 雕刻机设计论文
- 新疆宗教史课件
- 小儿心力衰竭课件
- 中医适宜技术在妇科的应用课件
- 成都纺织高等专科学校招聘笔试真题2024
- 人民检察院办案工作区设置和使用管理规定
- HGT21581-2012 自控安装图册
评论
0/150
提交评论