MySQL经典练习题+解题思路(三)

2022-11-23 19:01:18 浏览数 (1)

CSDN话题挑战赛第2期

参赛话题:学习笔记

个人主页:BoBooY的CSDN博客_Java领域博主 前言:在上一期中我们讲解了MySQL的入门知识点,但理论总还是要通过实践来印证,学了再多不练也是白费,这一期我们讲解MySQL的一些经典查询例题帮助大家巩固已学知识点,如在做题过程中有知识点的遗忘,可以参考往期文章: MySQL入门知识点(上):https://blog.csdn.net/qq_58233406/article/details/127143537 MySQL入门知识点(下):https://blog.csdn.net/qq_58233406/article/details/127144532 文章目录

  • MySQL练习题(三)
    • 17、列出至少有 5 个员工的所有部门
    • 18、列出薪金比"SMITH" 多的所有员工信息
    • 19、 列出所有"CLERK"( 办事员) 的姓名及其部门名称, 部门的人数
    • 20、列出最低薪金大于 1500 的各种工作及从事此工作的全部雇员人数
    • 21、列出在部门"SALES"< 销售部> 工作的员工的姓名, 假定不知道销售部的部门编号.(*)
    • 22、列出薪金高于公司平均薪金的所有员工, 所在部门, 上级领导, 雇员的工资等级.
    • 23、 列出与"SCOTT" 从事相同工作的所有员工及部门名称
    • 24、列出薪金等于部门 30 中员工的薪金的其他员工的姓名和薪金.
    • 25、列出薪金高于在部门 30 工作的所有员工的薪金的员工姓名和薪金. 部门名称

MySQL练习题(三)

17、列出至少有 5 个员工的所有部门

代码语言:javascript复制
select 
	d.deptno,d.dname,count(e.ename) '人数'
from 
	emp e
join 
	dept d
on 
	e.deptno = d.deptno
group by
	e.deptno
having
	count(e.ename) >=5;

18、列出薪金比"SMITH" 多的所有员工信息

代码语言:javascript复制
select 
	*
from 
	emp e
where
	sal > (select sal from emp where ename = "SMITH");

19、 列出所有"CLERK"( 办事员) 的姓名及其部门名称, 部门的人数

(1)找出所有CLERK的人员

代码语言:javascript复制
select 
	*
from
	emp
where
	job = 'CLERK';

(2)找上面结果对应的部门名称

代码语言:javascript复制
select 
	e.ename,e.job,d.dname,d.deptno
from
	emp e
join
	dept d
on
	e.deptno = d.deptno
where
	job = 'CLERK';

(3)查询每个部门的人数

代码语言:javascript复制
select 
	deptno,count(*)
from 
	emp e
group by
	deptno;

(4)将这两个结果合并

代码语言:javascript复制
	select 
        t1.dname,t1.job,t1.deptno,t2.num
    from(
        select 
            e.ename ename,e.job job,d.dname dname,d.deptno deptno
        from
            emp e
        join
            dept d
        on
            e.deptno = d.deptno
        where
            job = 'CLERK'
        ) t1
    join(
        select 
            deptno,count(*) num
        from 
            emp e
        group by
            deptno
        ) t2
    on
        t1.deptno = t2.deptno;

20、列出最低薪金大于 1500 的各种工作及从事此工作的全部雇员人数

代码语言:javascript复制
select 
	job,count(*) '人数'
from 
	emp
group by
	job
having
	min(sal) > 1500;

-工作的员工的姓名,-假定不知道销售部的部门编号.(*)">21、列出在部门"SALES"< 销售部> 工作的员工的姓名, 假定不知道销售部的部门编号.(*)

代码语言:javascript复制
select 
	ename,job
from 
	emp
where
	deptno in(select deptno from dept where dname = 'SALES');

22、列出薪金高于公司平均薪金的所有员工, 所在部门, 上级领导, 雇员的工资等级.

(1)查询公司平均薪资

代码语言:javascript复制
select avg(sal) from emp;

(2)查询高于上面结果的人员信息

代码语言:javascript复制
select a.ename,a.deptno,b.ename,a.sal 
from emp a 
left join emp b 
on a.mgr = b.empno 
where a.sal > (select avg(sal) from emp);

(3)将上面结果与dept表进行内连接

代码语言:javascript复制
select 
	t.ename,t.deptno,t.sal,d.dname,t.mgr
from
	(select a.ename ename,a.deptno deptno,b.ename mgr,a.sal sal
     from emp a 
     left join emp b 
     on a.mgr = b.empno 
     where a.sal > (select avg(sal) from emp)) t
join 
	dept d
on
	t.deptno = d.deptno;

(4)将上面结果与salgrade表进行内连接

代码语言:javascript复制
select 
	t.ename,t.deptno,t.sal,d.dname,t.mgr '领导',s.grade
from
	(select a.ename ename,a.deptno deptno,b.ename mgr,a.sal sal
     from emp a 
     left join emp b 
     on a.mgr = b.empno 
     where a.sal > (select avg(sal) from emp)) t
join 
	dept d
on
	t.deptno = d.deptno
join
	salgrade s
on 
	t.sal between s.losal and s.hisal;

23、 列出与"SCOTT" 从事相同工作的所有员工及部门名称

代码语言:javascript复制
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.ename <> 'SCOTT';

24、列出薪金等于部门 30 中员工的薪金的其他员工的姓名和薪金.

代码语言:javascript复制
select 
	ename,sal
from
	emp
where
	sal in(select distinct sal from emp where deptno = 30) and deptno <> 30;

25、列出薪金高于在部门 30 工作的所有员工的薪金的员工姓名和薪金. 部门名称

代码语言:javascript复制
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 e where e.deptno = 30);

练习题集:

MySQL经典练习题 解题思路(一):https://blog.csdn.net/qq_58233406/article/details/127150051

MySQL经典练习题 解题思路(二):https://blog.csdn.net/qq_58233406/article/details/127162943

MySQL经典练习题 解题思路(四):https://blog.csdn.net/qq_58233406/article/details/127167682

0 人点赞