MySQL查询笔试真题(含详细答案解析)_第1页
MySQL查询笔试真题(含详细答案解析)_第2页
MySQL查询笔试真题(含详细答案解析)_第3页
MySQL查询笔试真题(含详细答案解析)_第4页
MySQL查询笔试真题(含详细答案解析)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

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

文档简介

MySQL查询笔试真题(含详细答案解析)本次试题适用于初级开发、后端实习生、数据库基础考核,题型涵盖基础查询、条件筛选、排序分页、聚合函数、分组统计、多表联查、子查询、去重、空值处理等核心高频考点。试题无偏题怪题,贴合企业真实面试场景,所有答案均附带解题思路和语句解析。通用测试表说明(所有题目基于以下两张表)1.员工表emp字段名字段类型字段说明emp_idint员工编号(主键)emp_namevarchar(20)员工姓名dept_idint部门编号salarydecimal(10,2)薪资hire_timedate入职时间jobvarchar(30)岗位2.部门表dept字段名字段类型字段说明dept_idint部门编号(主键)dept_namevarchar(20)部门名称locationvarchar(30)部门地点一、基础查询题型(每题5分,共30分)题目1:查询所有员工的姓名、岗位、薪资信息参考答案:sql

SELECTemp_name,job,salaryFROMemp;解析:基础单表查询,SELECT后直接指定需要展示的字段,FROM指定查询数据表,无需额外条件,直接查询对应字段所有数据即可。相较于SELECT*查询所有字段,指定字段查询性能更高,是开发中的规范写法。题目2:查询薪资在8000到15000之间的所有员工信息(包含边界值)参考答案:sql

SELECT*FROMempWHEREsalaryBETWEEN8000AND15000;解析:BETWEEN...AND...用于区间查询,默认包含区间两端数值,适用于数值、日期类型字段。也可使用等价语句:SELECT*FROMempWHEREsalary>=8000ANDsalary<=15000;两种写法效果一致,BETWEEN语句更简洁。题目3:查询所有岗位为“程序员”的员工姓名和入职时间,按薪资降序排序参考答案:sql

SELECTemp_name,hire_timeFROMempWHEREjob='程序员'ORDERBYsalaryDESC;解析:WHERE筛选岗位条件,ORDERBY实现排序,DESC代表降序(数值从大到小),ASC代表升序(默认可不写)。本题无需展示薪资,但可通过薪资字段排序,排序字段不强制要求在查询字段中。题目4:查询员工表中所有不重复的岗位名称参考答案:sql

SELECTDISTINCTjobFROMemp;解析:DISTINCT关键字用于去除查询结果中的重复数据,仅保留唯一值。适用于需要统计分类、查看枚举类字段所有取值的场景,仅对其后紧跟的字段生效。题目5:查询姓名包含“张”字的所有员工信息参考答案:sql

SELECT*FROMempWHEREemp_nameLIKE'%张%';解析:LIKE用于模糊查询,%是通配符,代表任意任意字符(包含空字符)。%张%表示姓名中任意位置包含“张”;张%代表以“张”开头;%张代表以“张”结尾。题目6:查询入职时间在2024年的员工姓名、薪资、入职时间参考答案:sql

SELECTemp_name,salary,hire_timeFROMempWHEREYEAR(hire_time)=2024;解析:YEAR()日期函数用于提取日期字段中的年份,同理可使用MONTH()、DAY()提取月份、日期。也可使用区间查询:hire_time>='2024-01-01'ANDhire_time<='2024-12-31',区间查询索引效率更高。二、聚合与分组查询(每题8分,共24分)题目7:统计公司员工总人数、平均薪资、最高薪资、最低薪资参考答案:sql

SELECTCOUNT(emp_id)AS员工总人数,AVG(salary)AS平均薪资,MAX(salary)AS最高薪资,MIN(salary)AS最低薪资FROMemp;解析:常用聚合函数:COUNT()统计数量、AVG()求平均值、MAX()求最大值、MIN()求最小值。使用AS可以给字段起别名,让查询结果更易读。COUNT(emp_id)优于COUNT(*),主键字段无空值,统计效率更高。题目8:按部门分组,查询每个部门的部门编号、员工人数、部门平均薪资,要求筛选出员工人数大于3人的部门参考答案:sql

SELECTdept_id,COUNT(emp_id)AS员工人数,AVG(salary)AS部门平均薪资FROMempGROUPBYdept_idHAVINGCOUNT(emp_id)>3;解析:GROUPBY用于分组统计,分组字段必须为查询中的非聚合字段。WHERE用于分组前筛选原始数据,HAVING用于分组后筛选统计结果,本题筛选分组后的人数,必须使用HAVING,不可用WHERE。题目9:统计每个岗位的最高薪资,按薪资从高到低排序参考答案:sql

SELECTjob,MAX(salary)AS岗位最高薪资FROMempGROUPBYjobORDERBYMAX(salary)DESC;解析:先根据岗位分组,统计每组的薪资最大值,最后通过排序字段对统计结果排序。ORDERBY后可直接使用聚合函数,也可使用字段别名。三、多表联查题型(每题10分,共30分)题目10:查询所有员工的姓名、薪资、所属部门名称、部门地点参考答案:sql

SELECTe.emp_name,e.salary,d.dept_name,d.locationFROMempeINNERJOINdeptdONe.dept_id=d.dept_id;解析:内连接(INNERJOIN)查询两张表中关联匹配的数据,只展示有部门的员工数据。为表设置别名(e、d)可以简化语句,是多表查询的通用规范。关联条件必须使用两张表的外键和主键匹配(dept_id)。题目11:查询所有部门的名称、部门人数(包含无员工的空部门)参考答案:sql

SELECTd.dept_name,COUNT(e.emp_id)AS部门人数FROMdeptdLEFTJOINempeONd.dept_id=e.dept_idGROUPBYd.dept_id,d.dept_name;解析:左连接(LEFTJOIN)以左表(dept部门表)为基准,展示所有部门数据,即使部门无员工也会保留,员工字段为空。COUNT(e.emp_id)会自动忽略空值,空部门统计人数为0,符合业务需求。如果使用内连接,会过滤掉无员工的部门。题目12:查询薪资高于公司平均薪资的员工姓名、薪资、部门名称参考答案:sql

SELECTe.emp_name,e.salary,d.dept_nameFROMempeLEFTJOINdeptdONe.dept_id=d.dept_idWHEREe.salary>(SELECTAVG(salary)FROMemp);解析:本题结合子查询+多表联查。内层子查询先算出公司整体平均薪资,外层语句关联部门表,筛选出薪资高于平均值的员工数据。子查询结果为单一数值,可直接用于WHERE条件比较。四、进阶难题(每题16分,共16分)题目13:查询每个部门薪资最高的员工信息(部门内排名第一的员工,可能多人并列第一)参考答案:sql

SELECTe1.*,d.dept_nameFROMempe1LEFTJOINdeptdONe1.dept_id=d.dept_idWHEREe1.salary=(SELECTMAX(salary)FROMempe2WHEREe2.dept_id=e1.dept_id);解析:相关子查询经典用法,外层遍历每一位员工,内层查询当前员工所在部门的最高薪资,匹配成功即为部门薪资最高的员工。该写法可以兼容多人薪资并列第一的情况,不会遗漏数据,适配绝大多数业务场景,也是面试高频考点。五、附加简答题(20分)题目14:简述MySQL中INNERJOIN、LEFTJOIN、RIGHTJOIN的区别?参考答案:1.INNERJOIN(内连接):只返回两张表中关联字段匹配成功的数据,过滤掉所有不匹配的数据,是最常用的连接方式。2.LEFTJOIN(左连接):以左侧数据表为基准,返回左表所有数据,右表匹配不到的字段填充为空值。常用于需要保留主表全部数据的场景,比如查询所有部门及对应员工。3.RIGHTJOIN(右连接):以右侧数据表为基准,返回右表所有数据,左表匹配不到的字段填充为空值,日常开发使用频率较低,可通过调换表顺序用左连接替代。题目15:WHERE和HAVING的区别?参考答案:1.筛选时机不同:WHERE是分组(GROUPBY)之前筛选原始数据表数据;HAVING是分组之后筛选统计后的结果数据。2.支持函数不同:WHERE不能使用聚合函数(SUM、AVG、COUNT等);HAVING专门用于筛选聚合统计结果,

温馨提示

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

评论

0/150

提交评论