SQL高频面试题及答案(实战版)_第1页
SQL高频面试题及答案(实战版)_第2页
SQL高频面试题及答案(实战版)_第3页
SQL高频面试题及答案(实战版)_第4页
SQL高频面试题及答案(实战版)_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SQL高频面试题及答案(实战版)一、SQL基础概念题1、简述SQL的常用分类及核心作用答案:SQL主要分为四大类,日常开发面试最常用前三类:DQL(数据查询语言):核心为SELECT,用于查询数据库数据,是开发使用频率最高的语句。DML(数据操作语言):包含INSERT、UPDATE、DELETE,用于增、改、删表中数据。DDL(数据定义语言):包含CREATE、ALTER、DROP,用于创建、修改、删除数据库、数据表、字段等结构。DCL(数据控制语言):包含GRANT、REVOKE,用于权限授予和回收,多用于运维、数据库管理。2、DELETE、TRUNCATE、DROP的区别答案:DELETE:属于DML,只删除表数据,保留表结构;支持WHERE条件精准删除;可事务回滚;自增主键不重置。适合批量/精准删除数据。TRUNCATE:属于DDL,清空整张表数据,保留表结构;无WHERE条件,无法逐条删除;不可回滚;会重置自增主键;执行速度远快于DELETE。适合清空全表无效数据。DROP:属于DDL,直接删除整张表(数据+表结构),释放全部存储空间;不可回滚,风险最高,谨慎使用。3、WHERE和HAVING的核心区别答案:执行顺序不同:WHERE在分组(GROUPBY)之前过滤数据;HAVING在分组之后过滤分组后的结果。过滤内容不同:WHERE针对原始表的字段、单行数据过滤;HAVING针对聚合函数结果、分组后的统计数据过滤。聚合函数支持:WHERE不能使用SUM、COUNT等聚合函数;HAVING可以使用聚合函数。简单总结:先WHERE筛数据,再GROUPBY分组,最后HAVING筛分组结果。二、查询与语法实战题(高频)默认通用测试表:用户表user(id、name、age、gender、dept_id、create_time)、部门表dept(dept_id、dept_name)、订单表order(order_id、user_id、amount、create_time、status)1、查询表中重复的数据,只保留一条,删除多余重复数据场景:user表中name重复,保留id最小的一条,删除其他重复数据答案:sql

DELETEFROMuser

WHEREidNOTIN(SELECTMIN(id)FROMuserGROUPBYname);思路:先分组查询出每组重复数据的最小主键,删除不在该范围内的多余重复数据。2、查询每个部门的人数、平均年龄,筛选出平均年龄大于30岁的部门答案:sql

SELECTdept_id,COUNT(id)ASuser_num,AVG(age)ASavg_age

FROMuser

GROUPBYdept_id

HAVINGAVG(age)>30;3、模糊查询的LIKE、%、_用法,以及避免模糊查询失效索引的方式答案:%:匹配任意多个字符;_:匹配单个任意字符。常规写法:LIKE'张%'(右模糊)、LIKE'%张'(左模糊)、LIKE'%张%'(全模糊)索引失效规则:左模糊、全模糊会失效索引,只有右模糊可以走索引。优化方案:避免前置%,必要时使用全文索引替代普通模糊查询。4、DISTINCT的作用及使用注意事项答案:DISTINCT用于去除查询结果的重复数据,返回唯一值。注意事项:作用于所有查询字段组合,不是单个字段;多字段去重是字段组合唯一。执行效率较低,会额外排序去重,大数据量场景优先用GROUPBY替代。不会过滤NULL值,多个NULL值会被判定为重复,只保留一个。三、联表查询与子查询1、内连接、左连接、右连接、全连接的区别及使用场景答案:INNERJOIN(内连接):只返回两张表中匹配关联条件的数据,无匹配则不展示。适用于需要同时存在两张表数据的场景。LEFTJOIN(左连接):以左表为基准,展示左表所有数据,右表匹配不到则显示NULL。最常用,比如查询所有用户及对应订单信息。RIGHTJOIN(右连接):以右表为基准,展示右表所有数据,左表匹配不到显示NULL。使用频率极低。FULLJOIN(全连接):展示左右两张表所有数据,无匹配则补NULL。MySQL不支持,可通过UNION拼接实现。2、查询所有用户的姓名、部门名称,无部门的用户也需展示答案:使用左连接,用户表为左表sql

SELECT,d.dept_name

FROMuseru

LEFTJOINdeptdONu.dept_id=d.dept_id;3、UNION和UNIONALL的区别答案:UNION:合并查询结果,自动去重,自带排序,效率低。UNIONALL:直接拼接结果,不去重、不排序,效率远高于UNION。开发原则:确认数据无重复时,优先使用UNIONALL。四、索引与优化面试题(核心高频)1、什么是索引?索引的优缺点答案:索引是数据库用于快速检索数据的磁盘数据结构,相当于数据表的目录。优点:大幅提升查询、排序、分组效率,减少数据库IO消耗。缺点:占用额外磁盘存储空间;降低增删改效率,数据变更时,需要同步更新索引结构;索引不是越多越好,无效索引会增加数据库负担。2、MySQL常见索引类型及适用场景答案:主键索引(PRIMARY):唯一、非空,一张表只能一个,查询效率最高。唯一索引(UNIQUE):字段值唯一、可空,适用于手机号、身份证号等唯一字段。普通索引(INDEX):无唯一性限制,适用于高频查询、筛选字段。联合索引:多个字段组合索引,遵循最左前缀原则,适用于多字段联合查询场景。3、联合索引最左前缀原则,以及失效场景答案:联合索引(a,b,c),查询条件必须命中最左侧首个字段a,索引才会生效。索引失效常见场景:不满足最左前缀,直接查询b、c字段;字段使用函数、运算、类型转换;LIKE左模糊、全模糊查询;OR连接非索引字段;MySQL优化器判定全表扫描比索引查询更快,自动放弃索引。4、SQL慢查询优化的通用思路答案:索引优化:为高频查询、筛选、排序字段建立合适索引,避免冗余索引、无效索引。语句优化:避免SELECT*,只查所需字段;避免全模糊查询、字段运算;优先使用INNERJOIN替代子查询。分页优化:深分页(LIMIT10000,10)通过主键偏移、覆盖索引优化,避免大量数据扫描。数据优化:大表分表、冷热数据分离,减少单表数据量。五、事务与锁机制面试题1、数据库事务四大特性(ACID)答案:原子性(Atomicity):事务要么全部执行成功,要么全部回滚,不可部分执行。一致性(Consistency):事务执行前后,数据库数据完整性、约束规则保持一致。隔离性(Isolation):多个事务并发执行时,相互独立、互不干扰。持久性(Durability):事务提交成功后,数据永久落地,服务器宕机也不会丢失。2、MySQL事务四大隔离级别及并发问题答案:从低到高:读未提交:可读取未提交数据,存在脏读、不可重复读、幻读。极少使用。读已提交(默认):只能读取已提交数据,解决脏读,存在不可重复读、幻读。可重复读(InnoDB默认):同一事务内多次读取数据一致,解决脏读、不可重复读,存在幻读。串行化:最高隔离级别,事务串行执行,解决所有并发问题,性能极差。核心问题解释:脏读(读未提交数据)、不可重复读(同一事务多次查询结果不同)、幻读(其他事务新增/删除数据)。六、常见实操难题1、如何实现分页查询?深分页LIMIT10000,10为什么慢?怎么优化?答案:常规分页:SELECT*FROMuserLIMIT10,10(跳过10条,取10条)深分页慢的原因:LIMIT偏移量过大时,数据库会先扫描前10010条数据,丢弃前10000条,只返回后10条,扫描数据量极大。优化方案:sql

--主键偏移优化

SELECT*FROMuserWHER

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论