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

img

个人主页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练习题(二)

9、取得薪水最高的前五名员工

select 
	e.ename,e.sal
from 
	emp e
order by
	e.sal desc
limit 0,5;

在这里插入图片描述

10、取得薪水最高的第六到第十名员工

select 
	e.ename,e.sal
from 
	emp e
order by
	e.sal desc
limit 5,5;

在这里插入图片描述

11、取得最后入职的 5 名员工

select ename,hiredate from emp order by hiredate desc limit 5;

在这里插入图片描述

12、取得每个薪水等级有多少员工

(1)求每个人的薪水等级

select e.ename,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;

在这里插入图片描述

(2)将结果按照等级分组 求每个级别的数量 (可以不用视图,我这里只是想试一试)

create view view_empgrade as select e.ename,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal; #用结果创建一个视图
select grade,count(*) from view_empgrade group by grade;

在这里插入图片描述

13、面试题:(*)

有 3 个表 S(学生表),C(课程表),SC(学生选课表)
S(SNO,SNAME)代表(学号,姓名)
C(CNO,CNAME,CTEACHER)代表(课号,课名,教师)
SC(SNO,CNO,SCGRADE)代表(学号,课号,成绩)
问题:

13.1、找出没选过“黎明”老师的所有学生姓名。

select s.sname from s join sc on s.sno = sc.sno join c on c.cno = sc.cno where c.cteacher <> '黎明';

13.2、列出 2 门以上(含2 门)不及格学生姓名及平均成绩。

(1)先找出所有grade小于60的学生

select s.sname,sc.grade from s join sc on s.sno = sc.sno where sc.grade < 60;

(2)将这个结果按学生的姓名按照条件进行分组,并求平均值

select 
	s.sname,avg(sc.grade) 
from 
	s 
join 
	sc 
on
	s.sno = sc.sno 
where 
	sc.grade < 60
group by
	s.sname
having
	count(*) >= 2;

13.3、既学过 1 号课程又学过 2 号课所有学生的姓名。

(1)先找出学过1号课程的学生

select s.sname from s join sc on s.sno = sc.sno where sc.cno = 1;

(2)再从上面结果查找学过2号课程的学生

select 
	s.sname 
from 
	s 
join 
	sc 
on 
	s.sno = sc.sno 
where 
	in(select s.sname from s join sc on s.sno = sc.sno where sc.cno = 1) and sc.cno = 1;

14、列出所有员工及领导的姓名

select 
	a.ename '员工', b.ename '领导' 
from 
	emp a
left join
	emp b
on 
	a.mgr = b.empno;

在这里插入图片描述

15、列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称

(1)找出受雇日期早于其直接上级的所有员工的编号,姓名

select 
	a.empno,a.ename,a.deptno
from 
	emp a
left join
	emp b
on
	a.mgr = b.empno
where
	a.hiredate < b.hiredate;

在这里插入图片描述

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

select
	t.empno,t.ename,d.dname
from(
	select 
		a.empno empno,a.ename ename,a.deptno deptno
	from 
		emp a
	left join
		emp b
	on
		a.mgr = b.empno
	where
		a.hiredate < b.hiredate
	) t
join
	dept d
on 
	t.deptno = d.deptno;

在这里插入图片描述

16、 列出部门名称和这些部门的员工信息的同时列出那些没有员工的部门

select 
	e.*,d.dname
from
	emp e
right join
	dept d
on
	e.deptno = d.deptno;

在这里插入图片描述

OPERATIONS这个部门没有员工

练习题集:
MySQL经典练习题+解题思路(一):https://blog.csdn.net/qq_58233406/article/details/127150051
MySQL经典练习题+解题思路(三):https://blog.csdn.net/qq_58233406/article/details/127165622
MySQL经典练习题+解题思路(四):https://blog.csdn.net/qq_58233406/article/details/127167682

尾声:创作不易,如果本文的内容对您有帮助,还望客官可以三连支持一下博主,👍(点赞)+✏️(评论)+⭐️(收藏)是我创作的巨大动力!如果有关于Java入门相关的问题,可以关注私信一下博主,随时为您解答!

img

  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-BoBooY-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值