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

下载本文档

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

文档简介

SQL高频面试题(真实职场版+详细答案)默认测试表(所有题目通用):1.员工表emp(员工id、姓名、部门id、薪资、入职时间、性别)2.部门表dept(部门id、部门名称、部门地址)3.工资表salary(员工id、月份、绩效工资、扣款)一、SQL基础语法面试题(入门高频)1、SQL中DDL、DML、DQL、DCL分别是什么?有什么区别?详细答案:这四类是SQL语句的核心分类,工作中分工完全不同:1.DDL(数据定义语言):用来改数据库、表结构,不操作数据。常用语句:CREATE、ALTER、DROP、TRUNCATE。执行后自动提交,不能回滚。2.DML(数据操作语言):用来增删改表中的数据。常用语句:INSERT、UPDATE、DELETE。需要手动提交事务,可以回滚。3.DQL(数据查询语言):只用来查数据,不会改任何内容。核心语句:SELECT,工作中用得最多。4.DCL(数据控制语言):用来管权限、事务。常用语句:GRANT、REVOKE、COMMIT、ROLLBACK。面试加分点:DELETE和TRUNCATE区别常考,DELETE是DML可回滚、会记录日志;TRUNCATE是DDL不可回滚、清空表数据不删除结构、速度更快。2、WHERE和HAVING的区别?详细答案:核心区别:筛选时机不同、支持的字段不同1.WHERE:分组之前筛选原始数据,不能用聚合函数(SUM、COUNT、MAX等)。2.HAVING:分组之后筛选分组结果,专门用来过滤聚合函数的结果。执行顺序:WHERE过滤原始数据→GROUPBY分组→HAVING过滤分组后数据示例:查询部门人数大于3人的部门SELECTdept_id,COUNT(*)ASnumFROMempGROUPBYdept_idHAVINGnum>3;这里不能用WHERE,因为人数是分组统计后的结果。3、DISTINCT的作用,以及使用注意事项?详细答案:作用:去除查询结果的重复数据,只保留唯一值。注意事项:1.DISTINCT是对整行字段组合去重,不是只对第一个字段;2.性能较差,大数据量下尽量少用,可以用GROUPBY替代去重;3.不能用在WHERE条件中,只能写在SELECT后。二、查询实操面试题(笔试必考)4、查询每个部门的员工人数、平均薪资、最高薪资、最低薪资详细答案+解题思路:解题核心:按部门分组,配合聚合函数统计sql

SELECT

dept_id,

COUNT(emp_id)AS员工人数,

AVG(salary)AS平均薪资,

MAX(salary)AS最高薪资,

MIN(salary)AS最低薪资

FROMemp

GROUPBYdept_id;补充:GROUPBY必须包含所有非聚合查询字段,否则会报错(MySQL严格模式、Oracle必报错)。5、查询薪资高于本部门平均薪资的所有员工详细答案+解题思路:解题核心:先查各部门平均薪资,再关联员工表对比(子查询+联表)sql

SELECTe.*

FROMempe

INNERJOIN(

--子查询:算出每个部门平均薪资

SELECTdept_id,AVG(salary)ASavg_sal

FROMemp

GROUPBYdept_id

)tONe.dept_id=t.dept_id

WHEREe.salary>t.avg_sal;6、SQL联表查询有几种?区别是什么?详细答案:常用4种,职场99%场景只用前3种:1.INNERJOIN(内连接):只返回两张表匹配成功的数据,两边都有才显示。2.LEFTJOIN(左连接):以左表为准,左表数据全部保留,右表匹配不到显示NULL。工作中最常用。3.RIGHTJOIN(右连接):以右表为准,右表数据全部保留,左表匹配不到显示NULL。4.FULLJOIN(全连接):左右表所有数据都保留,匹配不到显示NULL。MySQL不支持,Oracle支持。面试重点:尽量用LEFTJOIN,少用INNERJOIN,避免丢失左表有效数据。7、查询所有员工姓名、所属部门名称(无部门的员工也展示)详细答案:需求关键点:保留所有员工,用左连接(员工表左表,部门表右表)sql

SELECTe.emp_name,d.dept_name

FROMempe

LEFTJOINdeptdONe.dept_id=d.dept_id;三、进阶子查询与函数面试题8、IN、EXISTS的区别?哪个效率高?详细答案(职场真实结论):1.IN:先执行子查询,把结果集缓存,主查询匹配结果集。子查询结果集小的时候快。2.EXISTS:主查询逐行遍历,子查询做匹配判断,不返回数据只返回真假。子查询表数据量大的时候,EXISTS更快。总结:小结果集用IN,大表关联匹配用EXISTS;大数据量下优先EXISTS。9、GROUPBY和DISTINCT去重,哪个效率高?详细答案:正常情况下GROUPBY效率高于DISTINCT。原因:DISTINCT会对所有结果做排序去重,开销大;GROUPBY本身就是分组逻辑,MySQL优化器对GROUPBY优化更好,大数据量差距明显。日常开发去重优先写GROUPBY,不要习惯性用DISTINCT。10、窗口函数的作用?常用窗口函数有哪些?详细答案:窗口函数是面试高频进阶考点,核心作用:分组统计但不合并行。普通GROUPBY分组后会把多行合并成一行,窗口函数可以保留原始每行数据,同时展示分组统计结果。常用窗口函数:1.排序类:ROW_NUMBER()、RANK()、DENSE_RANK()2.聚合类:SUM()OVER()、AVG()OVER()高频考题:三种排序函数区别-ROW_NUMBER():连续不重复序号(1、2、3、4),无并列-RANK():并列跳号(1、2、2、4)-DENSE_RANK():并列不跳号(1、2、2、3)11、查询每个部门薪资排名前3的员工(含并列)详细答案:sql

SELECT*

FROM(

SELECT

emp_id,emp_name,dept_id,salary,

DENSE_RANK()OVER(PARTITIONBYdept_idORDERBYsalaryDESC)ASrank_num

FROMemp

)t

WHERErank_num<=3;解题说明:按部门分区、薪资倒序,取排名前三,用DENSE_RANK保证并列人员不被遗漏。四、数据库索引与优化面试题(核心高薪考点)12、什么是索引?索引的优缺点?详细答案(职场标准答案):索引是数据库给表字段建立的一种目录结构,用来加速查询。优点:大幅提升查询、排序、分组速度。缺点:1.占用磁盘空间;2.增删改数据时,需要同步更新索引,降低写入效率;3.不是所有场景都适合建索引。13、MySQL索引失效的常见场景(面试必背)详细答案(最全职场版):1.索引列使用函数、运算:WHERELEFT(name,2)='张'、WHEREage+1=202.隐式类型转换:字符串字段用数字查询(WHEREphone=1380000)3.LIKE以%开头:LIKE'%张三',后置%可以走索引4.OR连接非索引字段,会导致整体索引失效5.违背最左匹配原则(联合索引)6.MySQL判断全表扫描比索引更快时,会自动放弃索引(数据量少、重复值极高)14、什么是联合索引?最左匹配原则?详细答案:联合索引:给多个字段一起建的索引,比如INDEXidx_name_age(name,age)最左匹配原则:查询条件必须包含联合索引的最左侧第一个字段,索引才会生效,且按顺序匹配。举例:索引(a,b,c)-有效:wherea=1、wherea=1andb=2、wherea=1andb=2andc=3-失效:whereb=2、wherec=3、whereb=2andc=315、如何优化慢SQL?详细答案(职场实操步骤):2.对高频查询字段建立合适索引,避免冗余索引3.避免索引失效场景:不做字段运算、不用前模糊匹配、杜绝隐式转换4.杜绝SELECT*,只查询需要的字段,减少数据传输5.大表分页优化:避免limit10000,10这种深分页6.合理拆分大SQL,避免多表无效联表、避免大量子查询嵌套五、事务与数据库基础面试题16、数据库事务四大特性ACID?详细答案:1.原子性(A):事务要么全部执行成功,要么全部回滚,不会出现半完成状态2.一致性(C):事务执行前后,数据库数据状态合法、完整,不会出现脏数据3.隔离性(I):多个事务并发执行时,互相不干扰4.持久性(D):事务提交成功后,数据永久保存,宕机也不会丢失17、MySQL事务隔离级别?默认级别是什么?详细答案:4个级别(从低到高):1.读未提交:能读到其他事务未提交数据,脏读、幻读、不可重复读都存在2.读已提交:只能读已提交数据,解决脏读,存在不可重复读、幻读3.可重复读(MySQL默认):解决脏读、不可重复读,存在幻读4.串行化:最高级别,完全隔离,无并发问题,性能最差18、脏读、不可重复读、幻读的区别?详细通俗答案:1.脏读:一个事务读到了另一个事务未提交的脏数据,对方回滚后数据失效2.不可重复读:同一个事务内,两次查询同一数据,结果不一样(被其他事务修改提交)3.幻读:同一个事务内,两次范围查询,数据行数变了(被其他事务新增/删除数据)六、高频易错面试题19、DELETE、DROP、TRUNCATE区别?详细答案:1.DELETE:删除表数据,保留表结构,DML语句,可回滚,速度慢2.TRUNCATE:清空整张表数据,保留结构,DDL语句,不可回滚,

温馨提示

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

最新文档

评论

0/150

提交评论