SQL语句面试题及答案.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

SQL语句面试题及答案

一、基础查询类(共5题)

1.题目:现有员工表employees(字段:id,name,department_id,salary,hire_date),查询“研发部”(department_id=3)中薪资大于8000的员工姓名、薪资,按入职时间倒序排列

答案:

SELECTname,salary

FROMemployees

WHEREdepartment_id=3ANDsalary8000

ORDERBYhire_dateDESC;

思路解析:先通过WHERE筛选部门和薪资条件,再用ORDERBY按入职时间(hire_date)降序(DESC),默认升序可省略ASC,这里需求是“倒序”需明确写DESC。

2.题目:从员工表中查询每个部门的平均薪资,只显示平均薪资大于9000的部门ID和平均薪资,平均薪资保留2位小数

答案:

SELECT

department_id,

ROUND(AVG(salary),2)ASavg_salary

FROMemployees

GROUPBYdepartment_id

HAVINGAVG(salary)9000;

思路解析:用GROUPBY按部门分组,AVG()计算平均薪资,ROUND()保留小数,HAVING筛选分组后的结果(WHERE无法筛选聚合函数结果)。

3.题目:向员工表插入一条新数据:id=101,姓名=张三,部门ID=2,薪资=7500,入职时间=2024-01-15

答案:

INSERTINTOemployees(id,name,department_id,salary,hire_date)

VALUES(101,张三,2,7500,2024-01-15);

思路解析:指定插入的字段列表(避免字段顺序变动导致错误),日期类型值需用单引号包裹,数值类型直接写。

4.题目:将员工表中id=101的员工薪资调整为8200,部门ID改为3

答案:

UPDATEemployees

SETsalary=8200,department_id=3

WHEREid=101;

思路解析:必须加WHERE条件(否则会更新所有数据),多个字段用逗号分隔,赋值用等号。

5.题目:删除员工表中入职时间在2018年之前且薪资低于5000的员工数据

答案:

DELETEFROMemployees

WHEREhire_date2018-01-01ANDsalary5000;

思路解析:同样需加精准WHERE条件,日期比较用,删除前建议先执行SELECT确认数据范围,避免误删。

二、进阶应用类(共5题)

1.题目:现有部门表departments(字段:id,name),关联员工表,查询所有部门的名称及对应员工数量(无员工的部门显示0)

答案:

SELECT

d.nameASdept_name,

COUNT(e.id)ASemp_count

FROMdepartmentsd

LEFTJOINemployeeseONd.id=e.department_id

GROUPBYd.id,d.name;

思路解析:用LEFTJOIN保留所有部门(即使无员工),COUNT(e.id)统计员工数(NULL不计数),GROUPBY需包含部门表的主键和名称(确保分组唯一)。

2.题目:查询员工表中,每个部门薪资排名前2的员工姓名、部门ID、薪资

答案:

SELECT

name,

department_id,

salary

FROM(

SELECT

*,

ROW_NUMBER()OVER(PARTITIONBYdepartment_idORDERBYsalaryDESC)ASrn

FROMemployees

)AStemp

WHERErn=2;

思路解析:子查询用ROW_NUMBER()窗口函数,按部门(PARTITIONBY)分组,薪资降序排序(ORDERBY),给每条数据标排名(rn),外层筛选排名前2的数据。

3.题目:查询“市场部”(departments.name=市场部)员工中,薪资高于本部门平均薪资的员工姓名和薪资

答案:

SELECTe.name,e.salary

FROMemployeese

JOINdepartmentsdONe.depar

文档评论(0)

151****9429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档