mysql 经典练习题上
MY SQL
三张表
emp 表, 字段empno, ename, job, mgr, hiredate, sal, comm, deptno
dept表 , 字段 deptno, dname, loc
salgrade, 字段 grade, losal, hisal
第一题, 列出至少有五个员工的所有部门
- 先求出每个部门的员工数量
- 再加条件
# 先求每个部门的员工数量
select d.dname, count(e.empno)
e.deptno, count(e.empno) as sum_emp
from
emp e
group by e.deptno
# 然后就可以按照要求来进行连接和条件判断
select
from
emp e join dept d on e.deptno = d.deptno
group by e.deptno
having count(e.empno) >5
第二题,列出受雇日期早于其上级的员工编号,姓名,部门名称
- 核心方法是一张表多用,员工的领导编号是领导的员工编号,就可以人为的造出两张表格
- 然后用条件判断大于领导编号
select
e.empno, e.ename, e.deptno, d.dname
from
emp e join emp c
on
e.mgr = d.empno
join dept d
on
e.deptno = d.deptno
where
e.hiredate < d.hiredate
第三题, 取得每个薪水等级共有多少个员工
- 先求出员工的薪水等级
- 把员工的薪水等级作为一个临时表,对这个临时表进行group by 和计数操作
select
t.grade, count(t.ename)
from
(select
e.ename, s.grade
FROM
emp e join salgrade s
on
e.sal between s.losal and s.hisal) t
group by t.grade;
第四题, 取得比普通员工的薪水还要高的经理人的姓名
1.1 先找出普通员工
-- 1.1.1 先找出经理人编号
SELECT distinct mgr from emp;
-- 1.1.2 员工编号不在经理人编号里的就是员工编号
select * from emp where empno not in
(SELECT distinct mgr from emp where mgr is not null);
-- 1.2 查找出普通员工的最大薪资
select max(sal) as max_sal from emp where empno not in
(SELECT distinct mgr from emp where mgr is not null);
-- 1.3 员工表中大于员工薪资的就是经理, 因为大于最大员工就一定是经理
select
ename
from
emp
where
sal > (select max(sal) as max_sal from emp where empno not in
(SELECT distinct mgr from emp where mgr is not null));
第五题, 求平均薪水等级最低的部门编号
-- 1.1 求每个部门平均薪水等级情况
select
e.deptno, s.grade as avg_grade
from
emp e inner join salgrade s
on
e.sal between s.losal and s.hisal
group by e.deptno;
-- 1.2 求出部门最低薪水等级
select
min(t.avg_grade)
from
(select
e.deptno, s.grade as avg_grade
from
emp e inner join salgrade s
on
e.sal between s.losal and s.hisal
group by e.deptno) t;
-- 1.3 将两张表格进行连接 having 作为条件 grade
select
e.deptno, s.grade as avg_grade
from
emp e inner join salgrade s
on
e.sal between s.losal and s.hisal
group by e.deptno
having avg_grade = (select
min(t.avg_grade)
from
(select
e.deptno, s.grade as avg_grade
from
emp e inner join salgrade s
on
e.sal between s.losal and s.hisal
group by e.deptno) t);
第六题,求出平均薪水最高的部门编号
-- 1.1 求出每个部门的平均薪资
select
deptno, avg(sal) avg_sal
from
emp
group by deptno;
-- 1.2 求出最高的平均薪资
select
max(avg_sal)
from
(select
deptno, avg(sal) avg_sal
from
emp
group by deptno) t;
-- 1.3 求出平均薪水对应的最高编号
select
deptno, avg(sal) avg_sal
from
emp
group by deptno
having avg_sal = (select
max(avg_sal)
from
(select
deptno, avg(sal) avg_sal
from
emp
group by deptno) t);
第七题, 求出部门中所有人的平均薪水等级
-- 1.1 每个部门的平均薪水
select
deptno, avg(sal) avg_sal
from
emp
group by deptno;
-- 1.2 每个部门对应的薪水等级
select
t.deptno, s.grade
from
(select
deptno, avg(sal) avg_sal
from
emp
group by deptno) t join salgrade s
on t.avg_sal between s.losal and s.hisal;
第八题, 每个部门的最高薪水
-- 1.1 求出每个部门的最高薪资
select
deptno,max(sal) as max_sal
from
emp
group by deptno;
-- 1.2 将两张表格进行连接,求出一些想要的东西
select
e.deptno, e.ename, t.max_sal
from
emp e join (select
deptno,max(sal) as max_sal
from
emp
group by deptno) t on e.deptno = t.deptno and e.sal = t.max_sal;
第九题, 哪些人的薪资水平在部门的平平均薪资之上
-- 每个部门平均薪资水平
select
deptno, avg(sal) as avg_sal
from
emp
group by deptno;
-- 高于平均薪资的人
select
e.ename, e.sal
from
emp e join (select
deptno, avg(sal) as avg_sal
from
emp
group by deptno) t on e.deptno = t.deptno and e.sal > t.avg_sal;
mysql 经典练习题上的更多相关文章
- MYSQL经典练习题,熟悉DQL
MYSQL经典练习题 (本练习题可让你熟悉DQL,快速的上手DQL) 首先,先在数据库中建立基本数据库以及表项: DROP DATABASE IF EXISTS `test`; CREATE DATA ...
- MySQL经典练习题
表名和字段 –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id,c_name,t_id ...
- MySQL经典练习题及答案,常用SQL语句练习50题
表名和字段 –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id,c_name,t_id ...
- 10 个 MySQL 经典错误【转】
Top 1:Too many connections(连接数过多,导致连接不上数据库,业务无法正常进行) 问题还原 mysql> show variables like '%max_connec ...
- 【Python全栈-后端开发】MySQL数据库-练习题
MySQL数据库-练习题 一.表关系 请创建如下表,并创建相关约束 二.操作表 1.自行创建测试数据 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号: 3.查询平均成绩大于60分的同学的学号 ...
- 【不断更新】mysql经典50道题自我练习
mysql经典50道题自我练习 测试数据和练习题均转载自CSDN博主@启明星的指引的文章sql语句练习50题(Mysql版),用于mysql的每日自我练习 表名和字段 –1.学生表 Student(s ...
- Angularjs+node+Mysql实现地图上特定点的定位以及附加信息展示
注:本博文为博主原创,转载请注明出处. 在上一篇博文中主要讲述了如何利用AngularJs+Node+MySql构建项目,并实现地图上的多点标注,今天在这篇文章中,我们将在上一个项目的基础上,实现特定 ...
- 远程连接MySql连不上1130
mysql数据库user表中已存在主机=%的用户root,连接却提示1130. 用navicat开启user表>>>>在表里直接修改%账户root的密码(看到是未加密过的内容) ...
- 4月数据库流行度排行榜 MySQL能否追上Oracle
4月的数据库流行度排行榜可谓看点十足.闲言少叙,先上图: 前十名中,名次上升的都是NoSQL数据库,NoSQL凭借其对大数据处理的优势,发展越来越快.NoSQL是对众多非传统关系型数据库的总称,按存储 ...
随机推荐
- 爬虫(二):抓包工具Fiddler
1. 抓包工具Fiddler 1.1 Fiddler下载与安装 最简单的方法,打开百度,搜索fiddler下载. 下载完毕解压即可,此版本为绿色版. 点击这个即可运行抓包软件. 1.2 Fiddler ...
- IDEA中使用Maven模板创建Servelet项目并使用Tomcat来运行项目
首先需要正确安装Maven和Tomact,Maven安装和Tomact安装步骤,参见别的文章. 一.创建Maven工作空间 点击Finish按钮后,耐心等待.直到出现BUILD SUCCESS为止. ...
- Apply Grouping to List View Data 将分组应用于列表视图数据
This lesson will teach you how to apply grouping to List View data. For this purpose, you will group ...
- CAD制图初学入门如何学好CAD?CAD大神总结5点诀窍,必须收藏
现在有很多的小伙伴们都加入到了CAD这个大家庭中,一开始都是都是一脸懵的状态,更不知要从何入手! 小编才开始也是,但是只要掌握好CAD的技巧和脊髓,一切都不是事.CAD大神总结5点诀窍,悄悄告诉你,必 ...
- latex 添加Bibtex 全解(使用TeXstudio)
前提知识: 生成pdf的一般流程 在使用Latex之前,我们一般会借用已有的论文模板,在模板基础上加入我们自己的文章内容,随后编译成PDF文件,其基本流程就是:Latex->Bibtex-> ...
- 从0使用Ruby on Rails打造企业级RESTful API项目实战之我的云音乐
本节对我们项目实现的功能和知识点做一个简单的介绍,因为是RESTful API项目,所以对于后端来说基本上没有什么UI界面可展示,那我们就在关键的点,使用客户端(Android)实现的效果图. 课程简 ...
- No package gcc48-c++ available
yum install gcc48-c++ linux 下编译安装 rocksdb,发现没有这个 gcc48-c++,感觉这个48 应该是版本号,于是在 yum install gcc-c++,安装成 ...
- SSH的 Write failed: Broken pipe 问题
问题现象: 表示连接管道已经断开 解决方法: 方法一:客户端配置 在客户端的 ~/.ssh/ config文件(如不存在请自行创建)中添加下面内容: ServerAliveInterval 60 方法 ...
- 第05组 Beta版本演示
第05组 Beta版本演示 小组信息 组名:天码行空 组长博客:地址 组内成员: 组员 学号 卢欢(组长) 031702513 陈天恒 031702527 古力亚尔·艾山 031702511 张聪 0 ...
- Java实现网络聊天中使用的socket API与Linux socket API之间的关系
尝试着用Java编写一个网络聊天程序,发现总不如网上写的好,所以就直接引用了网上大神的优秀代码.代码如下: package project1; import java.awt.*; import ja ...