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

下载本文档

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

文档简介

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、WHERE和HAVING的区别1、执行时机不同:WHERE是分组前过滤,先筛选数据,再执行GROUPBY分组;HAVING是分组后过滤,先分组聚合,再筛选分组结果。2、使用范围不同:WHERE不能使用聚合函数(SUM、COUNT、MAX等);HAVING专门用于过滤聚合结果,支持聚合函数。3、优先级:WHERE优先级高于GROUPBY,HAVING优先级低于GROUPBY。示例:统计部门人数大于3人的部门PlainText

SELECTdept_id,COUNT(*)ASnumFROMemployeeGROUPBYdept_idHAVINGnum>3;二、查询与分组聚合面试题(高频实操)1、DISTINCT的作用及使用注意事项DISTINCT用于去除查询结果中的重复数据,只保留唯一值。注意事项:1、DISTINCT作用于其后所有字段,而非单个字段;多个字段去重时,只有所有字段数据完全一致才会判定为重复。2、该关键字会对结果集进行排序去重,大数据量下性能较差,尽量少用,可通过业务逻辑优化去重。2、GROUPBY分组的使用规则1、SELECT后的非聚合字段,必须全部出现在GROUPBY后面,否则会报语法错误(严格模式下)。2、GROUPBY可以对单个或多个字段分组,多字段分组是按照字段组合唯一分组。3、分组后筛选聚合结果必须用HAVING,不能用WHERE。3、如何查询一张表的第N条数据(分页经典题)使用LIMIT偏移量分页,LIMIT起始下标,查询条数,数据库下标从0开始。示例:查询员工表第5条数据PlainText

SELECT*FROMemployeeLIMIT4,1;通用公式:查询第N条数据,LIMITN-1,1三、联表查询面试题(核心重点)1、常用联表查询方式及区别(INNER/LEFT/RIGHT/FULLJOIN)假设存在A表、B表两张关联表:1、INNERJOIN(内连接):只查询两张表中关联字段匹配成功的数据,取两表交集,无匹配数据不展示。2、LEFTJOIN(左连接):以左表为基准,左表所有数据全部展示,右表匹配不到数据时显示NULL。工作中使用频率最高。3、RIGHTJOIN(右连接):以右表为基准,右表所有数据全部展示,左表匹配不到数据时显示NULL。4、FULLJOIN(全连接):展示两表所有数据,匹配不上的字段补NULL(MySQL不支持FULLJOIN,可通过UNION合并左右连接实现)。2、LEFTJOIN关联后出现重复数据的原因及解决办法原因:右表存在一对多数据,一条左表数据匹配到多条右表数据,导致结果重复。解决办法:1、关联前对右表去重(DISTINCT、GROUPBY);2、使用子查询筛选右表唯一数据后再关联;3、关联后通过DISTINCT去重。3、UNION和UNIONALL的区别1、去重差异:UNION会自动去除合并后的重复数据;UNIONALL直接拼接所有结果,不去重。2、性能差异:UNION需要排序去重,性能低;UNIONALL无排序操作,性能极高。3、使用场景:确定数据无重复时,优先使用UNIONALL;需要去重时使用UNION。4、强制要求:两个查询语句的字段数量、字段类型必须一致。四、子查询与函数面试题1、什么是子查询?子查询的分类子查询是嵌套在SQL语句中的查询语句,优先执行内层查询,结果作为外层查询的条件、字段或表。分类:1、标量子查询:内层查询返回单行单列数据;2、行子查询:返回单行多列数据;3、列子查询:返回多行单列数据;4、表子查询:返回多行多列数据,可作为临时表使用。2、IN和EXISTS的区别及使用场景1、执行逻辑:IN是先查子查询结果,再匹配主查询;EXISTS是遍历主查询,逐条校验子查询是否存在数据。2、性能差异:子查询数据量小、主查询数据量大,用IN;主查询数据量小、子查询数据量大,用EXISTS。3、空值问题:IN查询包含NULL时会过滤异常,EXISTS不受空值影响,稳定性更高。3、常用聚合函数及注意事项常用聚合函数:COUNT(计数)、SUM(求和)、AVG(平均值)、MAX(最大值)、MIN(最小值)。核心注意点:所有聚合函数都会忽略NULL值。特殊区别:COUNT(*)统计所有行数,不忽略NULL;COUNT(字段)统计字段非空数据,忽略NULL。五、窗口函数高频面试题1、窗口函数和聚合函数的区别1、聚合函数(GROUPBY)是多行合并为一行,会压缩数据行数;2、窗口函数是分组但不合并行,保留原始数据行数,同时展示分组统计结果,适合排名、累计统计场景。2、RANK、DENSE_RANK、ROW_NUMBER的区别(必考)以分数排名场景为例,存在同分数据时:1、ROW_NUMBER:连续不重复排名,1、2、3、4,无论数据是否相同,排名依次递增,无并列、无跳号。2、RANK:并列排名,存在跳号,1、2、2、4,同分排名一致,后续排名跳过空缺序号。3、DENSE_RANK:并列排名,无跳号,1、2、2、3,同分排名一致,后续排名连续递增。六、数据库事务面试题1、事务的四大特性(ACID)1、原子性(Atomicity):事务要么全部执行成功,要么全部回滚,不可部分执行。2、一致性(Consistency):事务执行前后,数据库数据状态保持合法一致,不会出现数据错乱。3、隔离性(Isolation):多个事务并发执行时,相互独立互不干扰。4、持久性(Durability):事务提交成功后,数据永久落地,服务器宕机也不会丢失。2、MySQL事务隔离级别及并发问题四大隔离级别(从低到高):1、读未提交:可读取未提交数据,存在脏读、不可重复读、幻读问题。2、读已提交(MySQL默认):只能读取已提交数据,解决脏读,存在不可重复读、幻读。3、可重复读:保证同一事务多次读取数据一致,解决脏读、不可重复读,存在幻读。4、串行化:最高隔离级别,事务串行执行,解决所有并发问题,性能最低。3、脏读、不可重复读、幻读的区别1、脏读:一个事务读取到另一个事务未提交的修改数据,后续对方回滚,数据失效。2、不可重复读:同一事务内,两次读取同一数据结果不同,被其他事务修改并提交。3、幻读:同一事务内,查询数据的行数发生变化,被其他事务新增/删除数据。七、索引与SQL优化面试题1、什么是索引?索引的优缺点索引是数据库优化查询的磁盘数据结构,相当于表的目录,用于快速定位数据。优点:大幅提升查询效率,降低数据库IO消耗。缺点:占用磁盘空间;会降低新增、修改、删除的效率(数据变更需同步更新索引)。2、MySQL常用索引类型及区别1、主键索引:唯一且非空,一张表只能有一个主键索引,优先级最高。2、唯一索引:数据唯一,允许为空,一张表可多个唯一索引。3、普通索引:最基础索引,无唯一性约束,仅用于加速查询。4、联合索引:多个字段组合的索引,遵循最左匹配原则。3、联合索引最左匹配原则联合索引(a,b,c),生效规则:1、查询条件必须包含最左侧字段a,索引才会生效;2、匹配顺序从左到右,跳过左侧字段,后续字段索引全部失效;3、范围查询(>、<、LIKE%)后的字段索引失效。4、常见索引失效场景(高频)1、使用SELECT*,查询多余字段,无法触发索引覆盖;2、索引字段使用函数、运算、类型转换;3、LIKE以%开头(模糊前缀匹配);4、OR前后字段未全部建立索引;5、数据量过少、重复值过高,数据库放弃索引走全表扫描;6、违反联合索引最左匹配原则。5、日常SQL优化常用手段1、避免SELECT*,只查询需要的字段,减少数据传输;2、合理建立索引,高频查询字段建索引,避免冗余索引;3、优先使用EXISTS替代IN,大表查询优化;4、尽量用UNIONALL替代UNION,避免排序去重开销;5、WHERE条件精准过滤数据,减少分组、联表的数据量;6、大分页场景避免LIMIT超大偏移量,采用主键分页优化;7、禁止在索引字段做函数运算、手动类型转换。八、经典实操SQL面试题(带完整代码答案)场景表结构(通用面试表)员工表:employee(id,name,dept_id,salary,entry_time)部门表:dept(dept_id,dept_name)1、查询每个部门的员工人数、最高工资、最低工资、平均工资PlainText

SELECT

dept_id,

COUNT(*)ASstaff_num,

MAX(salary)ASmax_salary,

MIN(salary)ASmin_salary,

AVG(salary)ASavg_salary

FROMemployee

GROUPBYdept_id;2、查询所有员工姓名、所属部门名称(无部门显示NULL)PlainText

SELECT,d.dept_name

FROMemployeee

LEFTJOINdeptdONe.dept_id=d.dept_id;3、查询工资高于本部门平均工资的员工信息PlainText

SELECT*FROMemployeee1

WHEREsalary>(

SELECTAVG(salary)FROMemployeee2WHEREe2.dept_id=e1.dept_id

);4、查询每个部门工资最高的员工(窗口函数解法)PlainText

SELECTname,dept_id,salary

FROM(

SELECT

温馨提示

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

评论

0/150

提交评论