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

下载本文档

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

文档简介

SQL经典面试题及详细答案(实战版)本次题库整理互联网、传统软件、数据分析岗位高频SQL面试题,覆盖入门到进阶核心考点,所有题目均搭配可直接运行的标准SQL答案,适配MySQL主流数据库,语法贴合企业实际开发规范,无冗余花哨写法。通用测试表说明(所有题目共用)1.员工表emp(员工数据)PlainText

emp(emp_id,emp_name,dept_id,salary,hire_date,job)2.部门表dept(部门数据)PlainText

dept(dept_id,dept_name,location)3.工资记录表salary_log(薪资变动数据)PlainText

salary_log(emp_id,salary,change_date)4.成绩表score(学生成绩数据)PlainText

score(stu_id,subject,score)一、基础查询面试题1、查询所有员工的姓名、部门ID、薪资,薪资按降序排序解题思路:基础字段查询+排序,DESC表示降序,ASC为升序(默认可省略)参考答案:PlainText

SELECTemp_name,dept_id,salary

FROMemp

ORDERBYsalaryDESC;2、查询薪资在8000-15000之间的所有员工信息解题思路:范围查询可使用BETWEENAND,也可使用>=<=,两种写法等价参考答案:PlainText

--写法1:BETWEENAND(包含边界值)

SELECT*FROMemp

WHEREsalaryBETWEEN8000AND15000;

--写法2:基础运算符(更通用)

SELECT*FROMemp

WHEREsalary>=8000ANDsalary<=15000;3、查询姓名包含“张”的所有员工解题思路:模糊查询LIKE,%代表任意字符参考答案:PlainText

SELECT*FROMemp

WHEREemp_nameLIKE'%张%';补充:'张%'匹配姓张员工,'%张'匹配名字最后一字为张的员工4、查询部门ID为空的员工信息解题思路:NULL值判断必须用ISNULL,不能用=NULL(SQL规范语法)参考答案:PlainText

SELECT*FROMemp

WHEREdept_idISNULL;二、分组聚合面试题(高频)1、统计每个部门的员工人数、平均薪资、最高薪资、最低薪资解题思路:GROUPBY分组+聚合函数,分组字段为部门ID参考答案:PlainText

SELECT

dept_id,

COUNT(emp_id)ASemp_num,--员工人数

ROUND(AVG(salary),2)ASavg_salary,--平均薪资(保留2位小数)

MAX(salary)ASmax_salary,--最高薪资

MIN(salary)ASmin_salary--最低薪资

FROMemp

GROUPBYdept_id;2、查询员工人数大于3人的部门ID和员工人数解题思路:分组后筛选条件用HAVING,WHERE用于分组前筛选,HAVING用于分组后筛选参考答案:PlainText

SELECTdept_id,COUNT(emp_id)ASemp_num

FROMemp

GROUPBYdept_id

HAVINGCOUNT(emp_id)>3;核心区别:WHERE过滤原始数据,HAVING过滤分组后的聚合结果3、统计每个科目最高分、最低分、平均分参考答案:PlainText

SELECT

subject,

MAX(score)ASmax_score,

MIN(score)ASmin_score,

ROUND(AVG(score),2)ASavg_score

FROMscore

GROUPBYsubject;三、联表查询面试题(核心必考)1、查询所有员工的姓名、所属部门名称、薪资(关联员工表和部门表)解题思路:员工表为主表,左连接部门表,保留所有员工数据(含无部门员工)参考答案:PlainText

SELECT

e.emp_name,

d.dept_name,

e.salary

FROMempe

LEFTJOINdeptdONe.dept_id=d.dept_id;联表说明:1.LEFTJOIN:保留左表所有数据,右表无匹配则显示NULL2.INNERJOIN:只显示两表匹配的数据3.RIGHTJOIN:保留右表所有数据2、查询没有员工的部门ID和部门名称解题思路:部门表左连接员工表,筛选员工ID为空的记录,即为空部门参考答案:PlainText

SELECTd.dept_id,d.dept_name

FROMdeptd

LEFTJOINempeONd.dept_id=e.dept_id

WHEREe.emp_idISNULL;3、查询每个部门的部门名称、员工人数、平均薪资解题思路:联表后分组聚合,以部门维度统计数据参考答案:PlainText

SELECT

d.dept_name,

COUNT(e.emp_id)ASemp_num,

ROUND(AVG(e.salary),2)ASavg_salary

FROMdeptd

LEFTJOINempeONd.dept_id=e.dept_id

GROUPBYd.dept_id,d.dept_name;四、子查询面试题1、查询薪资高于公司平均薪资的员工信息解题思路:子查询先算出公司平均薪资,外层查询筛选符合条件的员工参考答案:PlainText

SELECT*FROMemp

WHEREsalary>(SELECTAVG(salary)FROMemp);2、查询每个部门薪资最高的员工信息解题思路:关联子查询,按部门匹配最高薪资参考答案:PlainText

SELECT*FROMempe1

WHEREsalary=(

SELECTMAX(salary)FROMempe2

WHEREe2.dept_id=e1.dept_id

);3、查询所有参加了数学考试的学生ID(去重)参考答案:PlainText

SELECTDISTINCTstu_id

FROMscore

WHEREsubject='数学';五、经典难题面试题(面试压轴)1、去除员工表中的重复薪资记录,保留emp_id最小的一条解题思路:分组找到重复薪资的最小ID,删除其余重复数据参考答案:PlainText

DELETEe1FROMempe1,empe2

WHEREe1.salary=e2.salaryANDe1.emp_id>e2.emp_id;2、查询连续三个月有薪资变动的员工ID解题思路:使用窗口函数LAG获取上一期数据,判断连续日期参考答案:PlainText

WITHtempAS(

SELECT

emp_id,

change_date,

LAG(change_date,1)OVER(PARTITIONBYemp_idORDERBYchange_date)ASlast_month

FROMsalary_log

)

SELECTDISTINCTemp_id

FROMtemp

WHEREPERIOD_DIFF(DATE_FORMAT(change_date,'%Y%m'),DATE_FORMAT(last_month,'%Y%m'))=1;3、行转列:将学生成绩表转换为学生ID、语文、数学、英语格式解题思路:CASEWHEN条件判断实现行转列,面试超高频考点参考答案:PlainText

SELECT

stu_id,

MAX(CASEsubjectWHEN'语文'THENscoreEND)ASchinese_score,

MAX(CASEsubjectWHEN'数学'THENscoreEND)ASmath_score,

MAX(CASEsubjectWHEN'英语'THENscoreEND)ASenglish_score

FROMscore

GROUPBYstu_id;六、高频概念简答题(口述面试专用)1、LEFTJOIN、INNERJOIN、RIGHTJOIN的区别?1.INNERJOIN:内连接,只返回两张表中匹配成功的数据,是最常用的联表方式;2.LEFTJOIN:左连接,以左表为基准,返回左表所有数据,右表无匹配数据显示NULL;3.RIGHTJOIN:右连接,以右表为基准,返回右表所有数据,左表无匹配数据显示NULL。2、WHERE和HAVING的区别?1.执行顺序:WHERE在分组(GROUPBY)之前执行,HAVING在分组之后执行;2.筛选内容:WHERE筛选原始表的字段数据,HAVING筛选分组后的聚合结果;3.函数支持:WHERE不能使用聚合函数(SUM、MAX、COUNT等),HAVING可以使用聚合函数。3、DI

温馨提示

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

评论

0/150

提交评论