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
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、平均工资最高的部门的部门名称
思路分析一:第一步:求部门平均工资,按部门编号分组
第二步:求部门平均最高工资
第三步:将第一步和第二步结合起来,寻求平均工资最高的部门编号,条件:结果 平均工资等于结果2的最大值
第四步:将上述查询结果作为临时表 t 以及部门信息表 dept d 连接条件:t.deptno = d.deptno
思路分析二:员工表与部门表连接,按部门名称分组
存取数据、查询、更新和管理关系数据库系统
以上列举的6道经典SQL试题还需细细研究,相信通过这6道经典SQL试题你可以自我测量你的学习效果。如果你能自己操作这些问题,那么恭喜你能学到更多java培训课程进入下一阶段的学习,如果有问题,那么比较答案和参考资料来弥补知识点的不足。我希望每个人都能掌握它SQL语句相关操作技能。