【MySQL】试题 — 31道巩固 SQL 语句的练习题

1.取得每个部门最高薪水的人员名称
先拿出各部门的最高工资,再与(最高工资对应的人员名录表)对接为临时表。

[En]

First take out the maximum salary of each department, and then connect it with (the name table of the personnel corresponding to the highest salary) as a temporary table.

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

  1. 哪些人的薪水在部门的平均薪水之上
    先拿出每个部门的平均工资,然后连接到(部门平均工资上的部门名称,薪级)作为临时表。
    [En]

    First take out the average salary of each department, and then connect it to (the name of the department on the average salary of the department, salary scale) as a temporary table.

    select
    t.*,e.ename,e.sal
    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.取得部门中所有人的平均薪水等级
找到每个人的薪水等级(emp连接salgrade)
select
e.ename,e.sal,e.deptno,s.grade
from
emp e
join
salgrade s
on
e.sal between s.losal and s.hisal;
基于以上结果继续按照deptno分组,求grade的平均值(直接两张表就行,不需要临时表)
select
e.deptno,avg(s.grade)
from
emp e
join
salgrade s
on
e.sal between s.losal and s.hisal
group by
e.deptno;

4.不准用组函数(Max),取得最高薪水(给出两种解决方案)
第一种,降序(limit)
select ename,sal from emp order by sal desc limit 1;
第二种方案,表的自连接
select sal from emp where sal not in(select distinct a.sal from emp a join emp b on a.sal

5.取出平均薪水最高的两个部门编号(至少给出两种解决方案)
第一种方案:
select deptno,avg(sal) as avgsal from emp group by deptno order by avgsal desc limit 1;

第二种解决方案:
select max(t.avgsal) from (select avg(sal) as avgsal from emp group by deptno) t;
select
deptno,avg(sal) as avgsal
from
emp
group by
deptno
having
avgsal = (select max(t.avgsal) from (select avg(sal) as avgsal from emp group by deptno) t);

6.求平均薪水的等级最低的部门的部门名称
找出最低平均工资对应的职级

[En]

Find out the grade corresponding to the minimum average salary

select
grade
from
salgrade
where
(select avg(sal) as avgsal,deptno from emp order by avgsal asc limit 1) between losal and hisal;

查询部门名称、平均工资、职级(对应最低平均工资)

[En]

Find out the department name, average salary, grade (corresponding to the minimum average salary)

select
t.*,s.grade
from
(select d.dname,avg(sal) as avgsal from emp e join dept on e.deptno = d.deptno group by d.dname) t
join
salgrade s
on
t.avgsal between s.losal and s.hisal;
where
s.grade = (select grade from salgrade where (select avg(sal) as avgsal,deptno from emp order by avgsal asc limit 1)
between losal and hisal);

7.取出比普通员工(员工代码没有在mgr字段出现的)的最高薪水还要高的领导人姓名
注意:not in 在使用时,后面小括号里记得排除 null
找到普通员工的最高薪水
select max(sal) from emp where empno not in(select distinct mgr from emp where mgr is not null);
找出高于(普通员工的最高工资)的员工。

[En]

Find employees who are higher than (the highest salary of the average employee).

select
ename,sal
from
emp
where
sal > (select max(sal)
from
emp
where
empno not in(select distinct mgr from emp where mgr is not null));

8.取出薪水最高的前五名
select ename,sal from emp order by sal desc limit 5;

9.取出薪水最高的第六到第十的员工
select ename,sal from emp order by sal desc limit 5,5;

10.取出最后入职的5名员工;
select ename,hiredate from emp order by hiredate desc limit 5;

11.取出每个薪水等级有多少个员工
select
s.grade,count(*)
from
emp e
join
salgrade s
on
e.sal between s.losal and s.hisal
group by
s.grade;

12.列出所有员工及领导的名字
select
a.ename ‘员工’,b.ename ‘领导’
from
emp a
left join
emp b
on
a.mgr = b.empno;

13.列出受雇日期早于直接上级的所有员工的姓名,受雇日期,直接上级的姓名,受雇日期,部门名称
select
a.empno ‘员工’,a.hiredate,b.ename ‘领导’,b.hire date,d.dname
from
emp a
join
emp b
on
a.mgr = b.empno
join
dept d
on
a.deptno = d.deptno
where
a.hiredate < b.hiredate;

14.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门
select
e.*,d.dname
from

emp e
right join
dept d
on
e.deptno = d.deptno;

15.列出至少有5个员工的所有部门
select
deptno
from
emp
group by
deptno
having
count(*) >= 5;

16.列出薪水比”SMITH”多的所有员工
select
ename,sal
from
emp
where
sal > (select sal from emp where ename = ‘SMITH’);

17.列出最低薪水大于1500的各种工作及其从事此工作的全部雇员人数
select
job,count(*)
from
emp
group by
job
having
min(sal) > 1500;

18.列出在部门”SALES”
select
ename
from
emp
where
deptno = (select deptno from dept where dname = ‘SALES’);

19.列出薪水高于公司平均薪水的所有员工,所在部门,上级领导,雇员的工资等级
select
e.ename ‘员工’,d.dname,l.ename ‘领导’,s.grade
from
emp e
join
dept d
on
e.empno = d.deptno
left join
emp l
on
e.mgr = l.empno
join
salgrade s
on
e.sal between s.losal and s.hisal
where
e.sal > (select avg(sal) from emp);

20.列出与”SCOTT”从事相同工作的所有员工及其部门名称
select
e.ename,e.job,d.dname
from
emp e
join
dept d
on
e.deptno = d.deptno
where
e.job = (select job from emp where ename = ‘SCOTT’)
and e.name <> ‘SCOTT’;

21.列出薪水等于部门30中员工的薪水的其他员工的姓名和薪水
select
ename,sal
from
emp
where
sal in(select distinct sal from emp where deptno = 30)
and
deptno <> 30;

22.列出薪水高于在部门30工作的所有员工的薪水的员工姓名和薪水,部门名称
select
e.ename,e.sal,d.dname
from
emp e
join
dept d
on
e.deptno = d,deptno
where
e.sal > (select max(sal) from emp where deptno = 30) ;

23.列出在每个部门工作的员工数量,平均工资和平均服务期限
select
d.deptno,
count(e.ename) as ecount,
ifnull(avg(e.sal),0) as avgsal,
ifnull(avg(timestampdiff(YEAR,hiredate,now())),0) as avgtime
from
emp e
right join
dept d
on
e.deptno = d.deptno
group by
d.deptno;

计算两个时间间隔的函数,语法为:

timestampdiff(间隔类型,前一个日期,后一个日期)
返回日期间的整数差。
FRAC_SECOND 表示间隔是毫秒
SECOND 秒
MINUTE 分钟
HOUR 小时
DAY 天
WEEK 星期
MONTH 月
QUARTER 季度
YEAR 年

24.列出所有员工的姓名,部门名称,和薪水
select
e.ename,d.dname,e.sal
from
emp e
join
dept d
on
e.deptno = d.deptno;

25.列出所有部门的详细信息和人数
select
d.deptno,d.dname,d.loc,count(e.ename)
from
emp e
join
dept d
on
e.deptno = d.deptno
group by
d.deptno,d.name,d.loc;

26.列出各种工作的最低工资及从事此工作的雇员姓名
select
e.ename,t.*
from
emp e
join
(select job,min(sal) as minsal from emp group by job)t
on
e.job = t.job and e.sal = t.,minsal;

27.列出各个部门MANAGER(领导)的最低薪水
select
deptno,min(sal)
from
emp
where
job = ‘MANAGER’
group by
deptno;

28.列出所有员工的年工资,按年薪从低到高排序
select
ename,(sal + ifnull(comm,0))*12 as yearsal
from
emp
order by
yearsal asc;

29.求出员工领导薪水超过3000的员工名称和领导
select
a.ename ‘员工’,b.ename ‘领导’
from
emp a
join
emp b
on
a.mgr = b.empno
where
b.sal > 3000;

30.求出部门名称带’S’的部门员工的工资合计,部门人数
select
d.deptno,d.dname,d.loc,count(e.ename),ifnull(sum(e.sal),0) as sumsal
from
emp e
right join
dept d
on
e.deptno = d.deptno
where
d.dname like ‘%S%’
group by
d.deptno,d.name,d.loc;

31.给任职日期超过30年的员工加薪 10%
update
emp
set
sal= sal*1.1 where timestampdiff(YEAR,hiredate,now())>30;

ps:博主少写了3道哟! ( •̀ ω •́ )✧

Original: https://www.cnblogs.com/Burning-youth/p/15685482.html
Author: 猿头猿脑的王狗蛋
Title: 【MySQL】试题 — 31道巩固 SQL 语句的练习题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/507960/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 斗地主游戏的案例开发

    关于java后端的斗地主游戏开发案例(只实现后端部分) 斗地主游戏的案例开发 业务需求分析: 斗地主的做牌, 洗牌, 发牌, 排序(拓展知识), 看牌。业务: 总共有54张牌。点数…

    数据库 2023年6月16日
    078
  • [springmvc]ssm框架整合超简单

    此整合没有具体的业务,因为ssm整合最难的点就在于配置文件的整合,因此这里只详细记录配置文件的整合 spring和dao整合将mybatis的配置文件的数据库连接和sqlsessi…

    数据库 2023年6月16日
    076
  • HackerRank第一趴–Basic Select

    ID number NAME VARCHAR2(17) COUNTRYCODE VARCHAR2(3) DISTRICT VARCHAR2(20) POPULATION numbe…

    数据库 2023年5月24日
    055
  • day44-反射03

    Java反射03 3.通过反射获取类的结构信息 3.1java.lang.Class类 getName:获取全类名 getSimpleName:获取简单类名 getFields:获…

    数据库 2023年6月11日
    077
  • Redis-实现分布式锁

    单节点分布式锁 本地的锁操作非常常见,无非就是申请一个锁变量lock, 加锁时,判断锁变量是否被持有,如果被持有中,则加锁失败,如果不被持有,则加锁成功,将锁的状态改为持有锁的这个…

    数据库 2023年6月11日
    071
  • 从前,有一个简单的通道系统叫尤娜……

    从前,有个女生宿舍,住着小A、小B、尤娜和我4个人。有天,小A不小心把小B的床板坐塌了。小B非常生气,当场和小A翻脸。不论人缘最好的尤娜怎么中间调解都不管用。一直到毕业,小A和小B…

    数据库 2023年6月6日
    085
  • Python open函数详解

    演示环境,操作系统:Win10 21H2(64bit);Python解释器:3.8.10。 open是Python的一个内置函数,一般用于本地文件的读写操作。用法如下。 1 my_…

    数据库 2023年6月11日
    0113
  • 掌握这9个单行代码技巧!你也能写出『高端』Python代码 ⛵

    💡 作者:韩信子@ShowMeAI📘 Python3◉技能提升系列:https://www.showmeai.tech/tutorials/56📘 本文地址:https://www…

    数据库 2023年6月14日
    098
  • 将博客搬至CSDN

    将博客搬至CSDN posted @2021-11-11 15:01 深海云帆 阅读(20 ) 评论() 编辑 Original: https://www.cnblogs.com/…

    数据库 2023年6月9日
    0103
  • MySQL 事务和锁

    事务概述 当多个用户访问相同的数据时,在更改数据的过程中,其他用户可能会同时发起更改请求,为了确保数据库记录的更新从一种一致性状态更改为另一种一致性状态,需要使用事务处理,它具有以…

    数据库 2023年5月24日
    064
  • 容器化 | 一文搞定镜像构建方式选型

    作者:安树博 青云科技 PaaS 中间件开发工程师从事 PaaS 中间件服务(Redis/Memcached 等)开发工作,热衷对 NoSQL 数据库领域内技术的学习与研究 官方镜…

    数据库 2023年5月24日
    078
  • COLA 架构规范定义

    基础架构图 Adapter 适配层:对前端展示的路由和适配。 VO:返回给前端的对象 assembler:将 responseDTO 转换为 VO web:处理页面请求的 Cont…

    数据库 2023年6月6日
    0110
  • jmeter-跨线程组全局变量

    需求:两个线程组(A线程组与B线程组)👉A线程组的变量信息被B线程组引用。 操作: 1. A线程组使用登录接口获取token、通过Json提取器获取到登录token, 然后添加&#…

    数据库 2023年6月14日
    089
  • 【运维】– Docker基础必知必会(1)

    1.Docker简介 Docker的出现简单地说就是为了解决运行环境和软件配置相关的不一致性问题,采用Docker镜像的方式将软件所需要的运行环境打包。通过Docker build…

    数据库 2023年6月6日
    0111
  • Docker 从入门到入土

    1、Docker简介 1.1 虚拟化技术 介绍 Docker之前有必要了解一下虚拟化技术,其实Docker的出现也是虚拟机技术发展的一个里程碑。随着企业业务量的不断提升,需要横向的…

    数据库 2023年6月6日
    083
  • 如何利用bat文件伪装成木马病毒整蛊他人

    bat文件是dos下的批处理文件。批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。 将以下代码复制到文本文档中,保存后修改文件后缀名称…

    数据库 2023年6月11日
    0102
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球