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

下载本文档

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

文档简介

SQL经典笔试题(含详细答案解析)本次试题适配初级开发、测试、数据岗位面试笔试,难度由浅入深,包含基础语法、聚合分组、联表查询、子查询、实战场景题型,所有题目均为企业高频真题,答案附带详细解析,可直接用于刷题复习。通用测试表说明(所有题目共用)1.员工表emp字段名字段说明数据类型emp_id员工编号(主键)intemp_name员工姓名varchardept_id部门编号intsalary薪资decimalhire_date入职时间datejob岗位varchar2.部门表dept字段名字段说明数据类型dept_id部门编号(主键)intdept_name部门名称varcharlocation部门地址varchar3.工资等级表salgrade字段名字段说明数据类型grade等级intlosal最低工资decimalhisal最高工资decimal一、基础查询题(共5题)题目1:查询所有员工的姓名、岗位、入职时间参考答案:sql

SELECTemp_name,job,hire_dateFROMemp;解析:基础单表查询,直接指定需要展示的字段即可,无需筛选条件。题目2:查询薪资大于8000的所有员工信息参考答案:sql

SELECT*FROMempWHEREsalary>8000;解析:使用WHERE条件过滤数据,*代表查询表中所有字段,可根据业务需求替换为指定字段。题目3:查询岗位为“程序员”且薪资在7000-12000之间的员工姓名和薪资参考答案:sql

SELECTemp_name,salaryFROMemp

WHEREjob='程序员'ANDsalaryBETWEEN7000AND12000;解析:BETWEEN...AND...包含区间首尾数值,多条件筛选使用AND连接,精准匹配岗位和薪资范围。题目4:查询入职时间在2023年的所有员工信息参考答案:sql

--写法1:通用写法,适配所有数据库

SELECT*FROMempWHEREhire_dateBETWEEN'2023-01-01'AND'2023-12-31';

--写法2:MySQL专属函数写法

SELECT*FROMempWHEREYEAR(hire_date)=2023;解析:时间筛选优先使用区间查询,兼容性更强;YEAR函数可快速提取年份,仅适用于MySQL数据库。题目5:查询姓名包含“张”的所有员工参考答案:sql

SELECT*FROMempWHEREemp_nameLIKE'%张%';解析:模糊查询关键字LIKE,%代表任意字符,%张%表示姓名中任意位置包含“张”字;若是查询姓张员工,可使用'张%'。二、聚合分组题(共4题)题目6:统计公司总员工数、平均薪资、最高薪资、最低薪资参考答案:sql

SELECT

COUNT(emp_id)AS总员工数,

AVG(salary)AS平均薪资,

MAX(salary)AS最高薪资,

MIN(salary)AS最低薪资

FROMemp;解析:常用聚合函数:COUNT统计数量、AVG求平均值、MAX最大值、MIN最小值,AS用于字段别名,方便结果展示。题目7:统计每个部门的员工人数、部门平均薪资,按员工人数降序排序参考答案:sql

SELECT

dept_id,

COUNT(emp_id)AS员工人数,

ROUND(AVG(salary),2)AS部门平均薪资

FROMemp

GROUPBYdept_id

ORDERBY员工人数DESC;解析:GROUPBY按部门分组,聚合函数会对每组数据单独计算;ROUND保留2位小数,DESC为降序排序,ASC为升序(默认)。题目8:查询员工人数大于3人的部门编号和员工人数参考答案:sql

SELECTdept_id,COUNT(emp_id)AS员工人数

FROMemp

GROUPBYdept_id

HAVINGCOUNT(emp_id)>3;解析:分组后筛选条件必须用HAVING,WHERE是分组前筛选原始数据,无法过滤分组后的聚合结果。题目9:统计各岗位的最高薪资,排除薪资低于5000的岗位参考答案:sql

SELECTjob,MAX(salary)AS岗位最高薪资

FROMemp

GROUPBYjob

HAVINGMAX(salary)>=5000;解析:先按岗位分组,计算每组最高薪资,再通过HAVING过滤掉最高薪资不达标的岗位。三、联表查询题(共4题)题目10:查询所有员工的姓名、薪资、所属部门名称参考答案:sql

SELECTe.emp_name,e.salary,d.dept_name

FROMempe

JOINdeptdONe.dept_id=d.dept_id;解析:内连接(JOIN)查询两张表关联数据,仅展示有部门的员工;给表设置别名简化语句,关联条件为部门编号一致。题目11:查询所有部门的信息,以及对应部门的员工姓名(包含无员工的部门)参考答案:sql

SELECTd.dept_id,d.dept_name,e.emp_name

FROMdeptd

LEFTJOINempeONd.dept_id=e.dept_id;解析:左连接(LEFTJOIN)以左表(部门表)为基准,展示左表所有数据,右表无匹配数据时显示NULL。题目12:查询员工姓名、薪资、部门名称、工资等级参考答案:sql

SELECTe.emp_name,e.salary,d.dept_name,s.grade

FROMempe

JOINdeptdONe.dept_id=d.dept_id

JOINsalgradesONe.salaryBETWEENs.losalANDs.hisal;解析:三表联查,员工表关联部门表获取部门名称,关联工资等级表,通过薪资区间匹配对应等级。题目13:查询没有员工的部门编号和部门名称参考答案:sql

SELECTd.dept_id,d.dept_name

FROMdeptd

LEFTJOINempeONd.dept_id=e.dept_id

WHEREe.emp_idISNULL;解析:左连接后,无员工的部门对应的员工编号为NULL,通过ISNULL筛选空数据,注意不能用=NULL判断空值。四、子查询与进阶题型(共4题)题目14:查询薪资高于公司平均薪资的员工姓名和薪资参考答案:sql

SELECTemp_name,salary

FROMemp

WHEREsalary>(SELECTAVG(salary)FROMemp);解析:标量子查询,先通过子查询算出公司平均薪资,再作为外层查询的筛选条件。题目15:查询和“张三”同部门的所有员工信息参考答案:sql

SELECT*FROMemp

WHEREdept_id=(SELECTdept_idFROMempWHEREemp_name='张三');解析:子查询先获取张三的部门编号,外层查询匹配同部门所有员工,适用于单条结果的子查询场景。题目16:查询每个部门薪资最高的员工信息参考答案:sql

SELECTe.*

FROMempe

INNERJOIN(

SELECTdept_id,MAX(salary)ASmax_sal

FROMemp

GROUPBYdept_id

)tONe.dept_id=t.dept_idANDe.salary=t.max_sal;解析:派生表子查询,先分组查出每个部门的最高薪资,再和原表关联,匹配出对应员工信息,可解决分组后取每组最大值的场景。题目17:查询重复入职的岗位(同一岗位入职2人及以上)参考答案:sql

SELECTjob,COUNT(emp_id)AS入职人数

FROMemp

GROUPBYjob

HAVINGCOUNT(emp_id)>=2;解析:按岗位分组统计人数,过滤人数大于等于2的岗位,快速筛选出重复招聘的岗位。五、经典易错题型(共2题)题目18:DISTINCT去重查询,查询公司所有不重复的岗位名称参考答案:sql

SELECTDISTINCTjobFROMemp;解析:DISTINCT用于去除查询结果的重复数据,仅对紧跟的字段生效,多字段去重需谨慎使用。题目19:查询薪资排名前5的员工(薪资相同并列)参考答案:sql

--MySQL写法

SELECTemp_name,salary

FROMemp

ORDERBYsalaryDESC

LIMIT5;解析:LIMIT用于限制查询结果条数,配合ORDERBY排序可实现排名查询;Oracle数据库需使用ROWNUM实现分页排名。六、简答题(面试高频)题目20:简述WHERE和HAVING的区别参考答案:1.执行顺序不同:WHERE是分组前过滤原始数据表数据;HAVING是分组后过滤分组、聚合后的结果数据。2.适用范围不同:WHERE后不能使用聚合函数(SUM、AVG、MAX等);HAVING专门用于过滤聚合结果,支持聚合函数。3.优先级不同:WHERE

温馨提示

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

评论

0/150

提交评论