动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

6道经典SQL试题(附答案)

08-27 17:46 235浏览
举报 T字号
  • 大字
  • 中字
  • 小字

SQL是结构化查询语言的简称,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言SQL语句分类SQL语句简单查询基本概念在前面已经学习过了,为了检验学习效果怎么样,这篇文章整理了6经典SQL试题,大家可以进行自测。

1、取得每个部门最高薪水的人员名称

思路分析:第一步:取得每个部门的最高薪水,按照部门分组求最大值

第二步:将上面的查询结果当做临时 t 与 emp e 进行表连接,连接条件

t.deptno = e.deptno and t.maxsal = e.sal

答案:

select

e.ename,t.*

from

emp e

join

(select deptno,max(sal) as maxsal from emp group by

deptno) t

on

t.deptno = e.deptno and t.maxsal = e.sal;

2、哪些人的薪水在部门平均薪水之上

思路分析:第一步:求部门平均薪水,按照部门分组求平均值

将以上查询结果当做临时表 t 与 emp e 进行表连接,连接条件:

e.deptno = t.deptno and e.sal > t.avgsal ;

答案:

select

e.ename,t.*

from

emp e

join

(select deptno,avg(sal) as avgsal from emp group by

deptno) t

on

e.deptno = t.deptno and e.sal > t.avgsal;

3、取得部门中(所有人的)平均薪水等级

思路分析:第一步:求部门中(所有人)平均薪水,按照部门分组求平均值

第二步:将以上查询结果当做临时表t与salgrade s进行表连接,

连接条件:t.avgsal

between s.losal and s.hisal

答案:

select

t.*,s.grade

from

salgrade s

join

(select deptno,avg(sal) as avgsal from emp e group by

deptno) t

on

t.avgsal between s.losal and s.hisal;

4、不准用组函数(MAX),取得最高薪水(给出两种解决方案)

第一种方案:按照薪水降序排列,取第一个

自连接

select sal from emp; 看做

 

select sal from emp; 看做

将以上两个查询结果分别看成a表和b表,进行表连接,条件:a.sal < b.sal,其中有一个值不小于从任何一个值,该值即为最大值;

使用distinct将以上结果去重,并且查询结果NOT IN不在以上查询结果中的即为最大值

答案:

select

sal

from

emp

where

sal not in(select distinct a.sal from emp a join emp b on

a.sal < b.sal);

5、取得平均薪水最高的部门的部门编号(至少两个方案)

第一种方案:思路分析

求每一个部门的平均薪水

求部门平均薪水的最大值

将以上第一步和第二步结果联合,条件:结果1的值等于结果2的值

答案:

select

deptno,avg(sal)

from

emp

group by

deptno

having

avg(sal) = (select avg(sal) as avgsal from emp group

by deptno order by avgsal desc limit 1);

第二种方案:思路分析:使用Max函数

求每一个部门的平均薪水

求部门平均薪水的最大值,使用Max函数

SELECT MAX(T.AVGSAL)

FROM ( SELECT DEPTNO ,AVG(SAL) AVGSAL

FROM EMP GROUP BY DEPTNO) T;

将以上第一步和第二步结果联合,条件:结果1的值等于结果2的值

答案:

select

deptno,avg(sal) as avgsal

from

emp

group by

deptno

having

avg(sal) = (select max(t.avgsal) from (select avg(sal) as

avgsal from emp group by deptno) t);

6、取得平均薪水最高的部门的部门名称

思路分析一:第一步:求部门的平均薪水,按部门编号分组

第二步:求部门平均最高薪水

第三步:将第一步和第二步联合起来,求平均薪水最高的部门编号,条件:结果 1的平均薪水等于结果2的最大值

第四步:将以上查询结果当做临时表 t 与部门信息表 dept d 进行表连接,连接条件:t.deptno = d.deptno

思路分析二:员工表与部门表连接,按部门名称分组

用于存取数据以及查询、更新和管理关系数据库系统

以上列举6道经典SQL试题细细研究,相信通过这6道SQL试题可以自测出自己的学习效果怎么样。如果这些题目自己都会操作了,那么恭喜可以学习更多的java培训课程进入到下一阶段的学习中,如果还有疑问的地方,那么就对照着答案和参考资料弥补欠缺的知识点。希望大家都可以掌握SQL语句的相关操作技能。

0人推荐
共同学习,写下你的评论
0条评论
一蓑烟雨
程序员一蓑烟雨

6篇文章贡献19494字

作者相关文章更多>

推荐相关文章更多>

MySQL开发规范

达芬奇09-04 11:38

必须掌握的30种SQL语句优化

不写代码你养我啊08-23 11:30

ES(Elasticsearch)支持PB级全文搜索引擎入门教程

HelloWorld09-29 17:28

Java面试中的hadoop面试题及答案整理

兔子06-15 17:15

数据库分类之速成篇

呵呵呀06-17 18:54

发评论

举报

0/150

取消