SQL面试常见问题解决方案_第1页
SQL面试常见问题解决方案_第2页
SQL面试常见问题解决方案_第3页
SQL面试常见问题解决方案_第4页
全文预览已结束

下载本文档

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

文档简介

SQL面试常见问题解决方案一、基础查询(必问)1.去重怎么写?sqlSELECTDISTINCTcolumnFROMtable;2.限制返回行数MySQL:sqlSELECT*FROMtLIMIT10;SQLServer:sqlSELECTTOP10*FROMt;Oracle:sqlSELECT*FROMtWHEREROWNUM<=10;二、聚合与分组(高频)3.统计每个部门的人数、平均工资sqlSELECTdept_id,COUNT(*)AScnt,AVG(salary)ASavg_salFROMemployeeGROUPBYdept_id;4.分组后筛选(HAVING与WHERE区别)WHERE先过滤行,再分组;HAVING过滤分组结果。例:找出平均工资>8000的部门sqlSELECTdept_id,AVG(salary)FROMemployeeGROUPBYdept_idHAVINGAVG(salary)>8000;5.COUNT(1)、COUNT(*)、COUNT(列)区别COUNT(*):统计所有行(含NULL)COUNT(1):效果同COUNT(*)COUNT(col):统计列非NULL行数三、多表连接(必考)6.INNERJOIN/LEFTJOIN/RIGHTJOIN/FULLJOININNERJOIN:只返回两边匹配的数据LEFTJOIN:左表全部,右表匹配,不匹配为NULLRIGHTJOIN:右表全部FULLJOIN:两边都保留(MySQL不支持,可用UNION模拟)7.查询每个员工及其部门名称(经典)sqlSELECT,d.dept_nameFROMemployeeeLEFTJOINdepartmentdONe.dept_id=d.dept_id;四、子查询与EXISTS(高频)8.找出没有下属的员工sqlSELECT*FROMemployeeWHEREidNOTIN(SELECTmanager_idFROMemployeeWHEREmanager_idISNOTNULL);9.EXISTS和IN的区别IN适合子查询结果小EXISTS更适合外表小、内表大,效率更高例:存在订单的用户sqlSELECT*FROMuseruWHEREEXISTS(SELECT1FROMorderoWHEREo.user_id=u.id);五、经典排名题(窗口函数必考)10.按部门分组,取每个部门工资最高的员工sqlSELECT*FROM(SELECTt.*,RANK()OVER(PARTITIONBYdept_idORDERBYsalaryDESC)ASrkFROMemployeet)tmpWHERErk=1;11.RANK/DENSE_RANK/ROW_NUMBER区别RANK():并列排名会跳号(1,1,3)DENSE_RANK():并列不跳号(1,1,2)ROW_NUMBER():行号,不并列(1,2,3)六、TopN问题(高频)12.取每个部门工资前3名sqlSELECT*FROM(SELECT*,DENSE_RANK()OVER(PARTITIONBYdept_idORDERBYsalaryDESC)rkFROMemployee)tWHERErk<=3;七、行列转换(常考)13.行转列(统计各学科成绩)sqlSELECTname,MAX(CASEWHENsubject='语文'THENscoreEND)AS语文,MAX(CASEWHENsubject='数学'THENscoreEND)AS数学FROMscoreGROUPBYname;14.列转行sqlSELECTname,'语文'ASsubject,chineseASscoreFROMscoreUNIONALLSELECTname,'数学',mathFROMscore;八、日期与字符串15.查询今天/本月/本年数据MySQL:sql--今天SELECT*FROMtWHEREDATE(create_time)=CURDATE();--本月SELECT*FROMtWHEREDATE_FORMAT(create_time,'%Y-%m')=DATE_FORMAT(NOW(),'%Y-%m');16.字符串拼接、截取MySQL:sqlCONCAT(a,b)SUBSTR(col,1,5)九、空值处理17.IFNULL/COALESCEsqlSELECTIFNULL(salary,0)FROMt;SELECTCOALESCE(salary,0)FROMt;十、重复数据处理(高频)18.查找重复记录sqlSELECTcol,COUNT(*)FROMtGROUPBYcolHAVINGCOUNT(*)>1;19.删除重复数据,保留一条sqlDELETEFROMtWHEREidNOTIN(SELECTMIN(id)FROMtGROUPBYcol);十一、索引与优化(必问)20.索引什么时候失效?使用!=、NOTIN、NOTEXISTS对索引列做函数/运算:YEAR(create_time)=2025LIKE以%开头:LIKE'%abc'隐式类型转换(字符串与数字比较)21.最左前缀原则联合索引(a,b,c)走索引:wherea/a,b/a,b,c不走:whereb/wherec22.如何优化慢SQL?EXPLAIN分析执行计划加合适索引避免SELECT*大分页优化(延迟关联)减少子查询,改用JOIN十二、事务与锁(进阶)23.事务四大特性ACID原子性、一致性、隔离性、持久性24.四种隔离级别读未提交、读已提交、可重复读(MySQL默认)、串行化25

温馨提示

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

评论

0/150

提交评论