Mysql笔记整理2
This commit is contained in:
1 parent
9e6b2fda4e
commit
a79596893c
2 files changed
+1491
No files matched your search
@@ -2,3 +2,13 @@
|
|||||||
# Bolg
|
# Bolg
|
||||||
|
|
||||||
> https://duyl328.github.io/
|
> https://duyl328.github.io/
|
||||||
|
|
||||||
|
|
||||||
|
## 协议
|
||||||
|
|
||||||
|
本仓库采用双协议授权,即 MIT 协议和 CC-BY-4.0 协议:
|
||||||
|
|
||||||
|
- 所有`.md`文件采用 CC-BY-4.0 协议协议,你需要保留署名权
|
||||||
|
- 其他代码文件采用 MIT 协议,你可以自由使用
|
||||||
|
|
||||||
|
具体内容请查看[LICENSE](./LICENSE)文件。
|
||||||
@@ -0,0 +1,1481 @@
|
|||||||
|
## 练习
|
||||||
|
|
||||||
|
基础:
|
||||||
|
|
||||||
|
数据库的启停;
|
||||||
|
|
||||||
|
MySQL的登录(显示密码和不显示密码);
|
||||||
|
|
||||||
|
退出MySQL;
|
||||||
|
|
||||||
|
查看数据库中有哪些库;
|
||||||
|
|
||||||
|
使用数据库;
|
||||||
|
|
||||||
|
创建数据库;
|
||||||
|
|
||||||
|
查看数据库下有多少个表;
|
||||||
|
|
||||||
|
查看表的结构,不显示表中数据;
|
||||||
|
|
||||||
|
查看当前使用哪个数据库;
|
||||||
|
|
||||||
|
删除数据库;
|
||||||
|
|
||||||
|
如何结束一个sql语句(不使用’;‘)
|
||||||
|
|
||||||
|
查看MySQL版本号;
|
||||||
|
|
||||||
|
查看创建表时使用的语句;
|
||||||
|
|
||||||
|
sql数据导入;
|
||||||
|
|
||||||
|
查看表中全部数据;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
查询:
|
||||||
|
|
||||||
|
简单查询;
|
||||||
|
|
||||||
|
查询字段的简单的数学运算;
|
||||||
|
|
||||||
|
给查询后的列重命名;
|
||||||
|
|
||||||
|
给查询后的列使用中文名字命名;
|
||||||
|
|
||||||
|
AS关键字省略写法;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
条件查询:
|
||||||
|
|
||||||
|
语法;
|
||||||
|
|
||||||
|
查询工资等于5000的员工姓名;
|
||||||
|
|
||||||
|
查询SMITH工资;
|
||||||
|
|
||||||
|
查询员工工资大于3000的员工;
|
||||||
|
|
||||||
|
查询员工工资高于1100并低于3000的员工姓名及工资;(两种查询方式)
|
||||||
|
|
||||||
|
is null:
|
||||||
|
|
||||||
|
找出哪些员工的福利(COMM)为NULL;
|
||||||
|
|
||||||
|
in , not in:
|
||||||
|
|
||||||
|
使用in找出工作是(MANAGER和SALESMAN)的员工;
|
||||||
|
|
||||||
|
\-------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
模糊查询:
|
||||||
|
|
||||||
|
查询名字中含有字母o的;
|
||||||
|
|
||||||
|
查询名字中第二个字母是A的;
|
||||||
|
|
||||||
|
查询名字中含有 ‘ _ ’的;
|
||||||
|
|
||||||
|
查询名字最后一个字母是T的;
|
||||||
|
|
||||||
|
排序:
|
||||||
|
|
||||||
|
数据排序:
|
||||||
|
|
||||||
|
找出岗位是salesman的员工,并按照工资降序排列;
|
||||||
|
|
||||||
|
按照工资升序排,当工资相同时按照名字降序排;
|
||||||
|
|
||||||
|
函数:
|
||||||
|
|
||||||
|
分组函数:
|
||||||
|
|
||||||
|
找出最高、最低、平均、工资总和
|
||||||
|
|
||||||
|
分组函数对NULL的处理;
|
||||||
|
|
||||||
|
单行处理函数对NULL的处理;
|
||||||
|
|
||||||
|
单行处理函数如何处理NULL;
|
||||||
|
|
||||||
|
count * 和count(字段名)的区别;
|
||||||
|
|
||||||
|
找出工资高于平均工资的员工;
|
||||||
|
|
||||||
|
找出每个岗位的最高薪资;
|
||||||
|
|
||||||
|
select、from、where、group by、having、order by的执行顺序;
|
||||||
|
|
||||||
|
找出不同部门每个工作岗位的最高薪资;
|
||||||
|
|
||||||
|
找出每个部门的最高薪资,要求显示大于2500的数据;(两种方式【where,having】)
|
||||||
|
|
||||||
|
查询结果的去重;
|
||||||
|
|
||||||
|
连接查询:
|
||||||
|
|
||||||
|
内连接:
|
||||||
|
|
||||||
|
什么是笛卡尔积现象;
|
||||||
|
|
||||||
|
笛卡尔积现象能避免吗;
|
||||||
|
|
||||||
|
查询每个员工部门名称,要求显示员工名和部门名;
|
||||||
|
|
||||||
|
找出每个员工的工资等级,要求显示员工名、工资、工资等级;
|
||||||
|
|
||||||
|
找出每个员工对应的上级领导,要求显示员工名和领导名;
|
||||||
|
|
||||||
|
外连接:
|
||||||
|
|
||||||
|
找出每个员工的上级领导,没有也要显示(14条记录)
|
||||||
|
|
||||||
|
找出哪个部门没有员工;
|
||||||
|
|
||||||
|
为什么要为每个表取别名
|
||||||
|
|
||||||
|
三表联查:
|
||||||
|
|
||||||
|
找出每一个员工的部门名称以及工资等级
|
||||||
|
|
||||||
|
找出每一个员工的部门名称以及工资等级,以及上级领导
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 1 - 5
|
||||||
|
|
||||||
|
#### 1、取得每个部门最高薪水的人员名称
|
||||||
|
|
||||||
|
|
||||||
|
第一步:取得每个部门最高薪水(按照部门编号分组,找出每一组最大值)
|
||||||
|
|
||||||
|
```sql
|
||||||
|
mysql> select deptno,max(sal) as maxsal from emp group by deptno;
|
||||||
|
+--------+---------+
|
||||||
|
| deptno | maxsal |
|
||||||
|
+--------+---------+
|
||||||
|
| 10 | 5000.00 |
|
||||||
|
| 20 | 3000.00 |
|
||||||
|
| 30 | 2850.00 |
|
||||||
|
+--------+---------+
|
||||||
|
```
|
||||||
|
|
||||||
|
第二步:将以上的查询结果当做一张临时表t,
|
||||||
|
|
||||||
|
t 和 emp 表连接,条件:t.deptno = e.deptno and t.maxsal = e.sal
|
||||||
|
```sql
|
||||||
|
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;
|
||||||
|
|
||||||
|
+-------+--------+---------+
|
||||||
|
| ename | deptno | maxsal |
|
||||||
|
+-------+--------+---------+
|
||||||
|
| BLAKE | 30 | 2850.00 |
|
||||||
|
| SCOTT | 20 | 3000.00 |
|
||||||
|
| KING | 10 | 5000.00 |
|
||||||
|
| FORD | 20 | 3000.00 |
|
||||||
|
+-------+--------+---------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 2、哪些人的薪水在部门的平均薪水之上
|
||||||
|
|
||||||
|
第一步:找出每个部门的平均薪水
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select deptno,avg(sal) as avgsal from emp group by deptno;
|
||||||
|
+--------+-------------+
|
||||||
|
| deptno | avgsal |
|
||||||
|
+--------+-------------+
|
||||||
|
| 10 | 2916.666667 |
|
||||||
|
| 20 | 2175.000000 |
|
||||||
|
| 30 | 1566.666667 |
|
||||||
|
+--------+-------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
第二步:将以上查询结果当做t表,t和emp表连接
|
||||||
|
|
||||||
|
条件:部门编号相同,并且 emp 的 sal 大于 t 表的 avgsal
|
||||||
|
```sql
|
||||||
|
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;
|
||||||
|
+--------+-------------+-------+---------+
|
||||||
|
| deptno | avgsal | ename | sal |
|
||||||
|
+--------+-------------+-------+---------+
|
||||||
|
| 30 | 1566.666667 | ALLEN | 1600.00 |
|
||||||
|
| 20 | 2175.000000 | JONES | 2975.00 |
|
||||||
|
| 30 | 1566.666667 | BLAKE | 2850.00 |
|
||||||
|
| 20 | 2175.000000 | SCOTT | 3000.00 |
|
||||||
|
| 10 | 2916.666667 | KING | 5000.00 |
|
||||||
|
| 20 | 2175.000000 | FORD | 3000.00 |
|
||||||
|
+--------+-------------+-------+---------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 3、取得部门中(所有人的)平均的薪水等级
|
||||||
|
|
||||||
|
平均的薪水等级:先计算每一个薪水的等级,然后找出薪水等级的平均值。
|
||||||
|
|
||||||
|
平均薪水的等级:先计算平均薪水,然后找出每个平均薪水的等级值。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
第一步:找出每个人的薪水等级
|
||||||
|
emp e 和 salgrade s 表连接。
|
||||||
|
|
||||||
|
连接条件:e.sal between s.losal and s.hisal
|
||||||
|
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select
|
||||||
|
e.ename,e.sal,e.deptno,s.grade
|
||||||
|
from
|
||||||
|
emp e
|
||||||
|
join
|
||||||
|
salgrade s
|
||||||
|
on
|
||||||
|
e.sal between s.losal and s.hisal;
|
||||||
|
|
||||||
|
+--------+---------+--------+-------+
|
||||||
|
| ename | sal | deptno | grade |
|
||||||
|
+--------+---------+--------+-------+
|
||||||
|
| CLARK | 2450.00 | 10 | 4 |
|
||||||
|
| KING | 5000.00 | 10 | 5 |
|
||||||
|
| MILLER | 1300.00 | 10 | 2 |
|
||||||
|
|
||||||
|
| SMITH | 800.00 | 20 | 1 |
|
||||||
|
| ADAMS | 1100.00 | 20 | 1 |
|
||||||
|
| SCOTT | 3000.00 | 20 | 4 |
|
||||||
|
| FORD | 3000.00 | 20 | 4 |
|
||||||
|
| JONES | 2975.00 | 20 | 4 |
|
||||||
|
|
||||||
|
| MARTIN | 1250.00 | 30 | 2 |
|
||||||
|
| TURNER | 1500.00 | 30 | 3 |
|
||||||
|
| BLAKE | 2850.00 | 30 | 4 |
|
||||||
|
| ALLEN | 1600.00 | 30 | 3 |
|
||||||
|
| JAMES | 950.00 | 30 | 1 |
|
||||||
|
| WARD | 1250.00 | 30 | 2 |
|
||||||
|
+--------+---------+--------+-------+
|
||||||
|
```
|
||||||
|
|
||||||
|
第二步:基于以上的结果继续按照deptno分组,求grade的平均值。
|
||||||
|
|
||||||
|
|
||||||
|
```sql
|
||||||
|
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;
|
||||||
|
|
||||||
|
+--------+--------------+
|
||||||
|
| deptno | avg(s.grade) |
|
||||||
|
+--------+--------------+
|
||||||
|
| 10 | 3.6667 |
|
||||||
|
| 20 | 2.8000 |
|
||||||
|
| 30 | 2.5000 |
|
||||||
|
+--------+--------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 4、不准用组函数(Max ),取得最高薪水
|
||||||
|
|
||||||
|
第一种:sal 降序,limit 1
|
||||||
|
```sql
|
||||||
|
select ename,sal from emp order by sal desc limit 1;
|
||||||
|
+-------+---------+
|
||||||
|
| ename | sal |
|
||||||
|
+-------+---------+
|
||||||
|
| KING | 5000.00 |
|
||||||
|
+-------+---------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
第二种方案:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select max(sal) from emp;
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
第三种方案:表的自连接
|
||||||
|
```sql
|
||||||
|
select sal from emp where sal not in(select distinct a.sal from emp a join emp b on a.sal < b.sal);
|
||||||
|
|
||||||
|
+---------+
|
||||||
|
| sal |
|
||||||
|
+---------+
|
||||||
|
| 5000.00 |
|
||||||
|
+---------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select
|
||||||
|
distinct a.sal
|
||||||
|
from
|
||||||
|
emp a
|
||||||
|
join
|
||||||
|
emp b
|
||||||
|
on
|
||||||
|
a.sal < b.sal
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
a表
|
||||||
|
```sql
|
||||||
|
+---------+
|
||||||
|
| sal |
|
||||||
|
+---------+
|
||||||
|
| 800.00 |
|
||||||
|
| 1600.00 |
|
||||||
|
| 1250.00 |
|
||||||
|
| 2975.00 |
|
||||||
|
| 1250.00 |
|
||||||
|
| 2850.00 |
|
||||||
|
| 2450.00 |
|
||||||
|
| 3000.00 |
|
||||||
|
| 5000.00 |
|
||||||
|
| 1500.00 |
|
||||||
|
| 1100.00 |
|
||||||
|
| 950.00 |
|
||||||
|
| 3000.00 |
|
||||||
|
| 1300.00 |
|
||||||
|
+---------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
b表
|
||||||
|
```sql
|
||||||
|
+---------+
|
||||||
|
| sal |
|
||||||
|
+---------+
|
||||||
|
| 800.00 |
|
||||||
|
| 1600.00 |
|
||||||
|
| 1250.00 |
|
||||||
|
| 2975.00 |
|
||||||
|
| 1250.00 |
|
||||||
|
| 2850.00 |
|
||||||
|
| 2450.00 |
|
||||||
|
| 3000.00 |
|
||||||
|
| 5000.00 |
|
||||||
|
| 1500.00 |
|
||||||
|
| 1100.00 |
|
||||||
|
| 950.00 |
|
||||||
|
| 3000.00 |
|
||||||
|
| 1300.00 |
|
||||||
|
+---------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 5、取得平均薪水最高的部门的部门编号
|
||||||
|
|
||||||
|
第一种方案:降序取第一个。
|
||||||
|
|
||||||
|
第一步:找出每个部门的平均薪水
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select deptno,avg(sal) as avgsal from emp group by deptno;
|
||||||
|
+--------+-------------+
|
||||||
|
| deptno | avgsal |
|
||||||
|
+--------+-------------+
|
||||||
|
| 10 | 2916.666667 |
|
||||||
|
| 20 | 2175.000000 |
|
||||||
|
| 30 | 1566.666667 |
|
||||||
|
+--------+-------------+
|
||||||
|
```
|
||||||
|
第二步:降序选第一个。
|
||||||
|
```sql
|
||||||
|
select deptno,avg(sal) as avgsal from emp group by deptno order by avgsal desc limit 1;
|
||||||
|
+--------+-------------+
|
||||||
|
| deptno | avgsal |
|
||||||
|
+--------+-------------+
|
||||||
|
| 10 | 2916.666667 |
|
||||||
|
+--------+-------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
第二种方案:max
|
||||||
|
|
||||||
|
第一步:找出每个部门的平均薪水
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select deptno,avg(sal) as avgsal from emp group by deptno;
|
||||||
|
+--------+-------------+
|
||||||
|
| deptno | avgsal |
|
||||||
|
+--------+-------------+
|
||||||
|
| 10 | 2916.666667 |
|
||||||
|
| 20 | 2175.000000 |
|
||||||
|
| 30 | 1566.666667 |
|
||||||
|
+--------+-------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
第二步:找出以上结果中avgsal最大的值。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select max(t.avgsal) from (select avg(sal) as avgsal from emp group by deptno) t;
|
||||||
|
+---------------+
|
||||||
|
| max(t.avgsal) |
|
||||||
|
+---------------+
|
||||||
|
| 2916.666667 |
|
||||||
|
+---------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
第三步:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
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);
|
||||||
|
|
||||||
|
+--------+-------------+
|
||||||
|
| deptno | avgsal |
|
||||||
|
+--------+-------------+
|
||||||
|
| 10 | 2916.666667 |
|
||||||
|
+--------+-------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 5 - 10
|
||||||
|
|
||||||
|
#### 6、取得平均薪水最高的部门的部门名称
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select
|
||||||
|
d.dname,avg(e.sal) as avgsal
|
||||||
|
from
|
||||||
|
emp e
|
||||||
|
join
|
||||||
|
dept d
|
||||||
|
on
|
||||||
|
e.deptno = d.deptno
|
||||||
|
group by
|
||||||
|
d.dname
|
||||||
|
order by
|
||||||
|
avgsal desc
|
||||||
|
limit
|
||||||
|
1;
|
||||||
|
|
||||||
|
+------------+-------------+
|
||||||
|
| dname | avgsal |
|
||||||
|
+------------+-------------+
|
||||||
|
| ACCOUNTING | 2916.666667 |
|
||||||
|
+------------+-------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 7、求平均薪水的等级最低的部门的部门名称
|
||||||
|
|
||||||
|
平均薪水是 800
|
||||||
|
平均薪水是 900
|
||||||
|
那么他俩都是 1 级别。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
第一步:找出每个部门的平均薪水
|
||||||
|
```sql
|
||||||
|
select deptno,avg(sal) as avgsal from emp group by deptno;
|
||||||
|
+--------+-------------+
|
||||||
|
| deptno | avgsal |
|
||||||
|
+--------+-------------+
|
||||||
|
| 10 | 2916.666667 |
|
||||||
|
| 20 | 2175.000000 |
|
||||||
|
| 30 | 1566.666667 |
|
||||||
|
+--------+-------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
第二步:找出每个部门的平均薪水的等级
|
||||||
|
以上 t 表和 salgrade 表连接,条件:t.avgsal between s.losal and s.hisal
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select
|
||||||
|
t.*,s.grade
|
||||||
|
from
|
||||||
|
(select d.dname,avg(sal) as avgsal from emp e join dept d on e.deptno = d.deptno group by d.dname) t
|
||||||
|
join
|
||||||
|
salgrade s
|
||||||
|
on
|
||||||
|
t.avgsal between s.losal and s.hisal;
|
||||||
|
|
||||||
|
+------------+-------------+-------+
|
||||||
|
| dname | avgsal | grade |
|
||||||
|
+------------+-------------+-------+
|
||||||
|
| SALES | 1566.666667 | 3 |
|
||||||
|
| ACCOUNTING | 2916.666667 | 4 |
|
||||||
|
| RESEARCH | 2175.000000 | 4 |
|
||||||
|
+------------+-------------+-------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select
|
||||||
|
t.*,s.grade
|
||||||
|
from
|
||||||
|
(select d.dname,avg(sal) as avgsal from emp e join dept d 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 from emp group by deptno order by avgsal asc limit 1) between losal and hisal);
|
||||||
|
|
||||||
|
+-------+-------------+-------+
|
||||||
|
| dname | avgsal | grade |
|
||||||
|
+-------+-------------+-------+
|
||||||
|
| SALES | 1566.666667 | 3 |
|
||||||
|
+-------+-------------+-------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
抛开之前的,最低等级你怎么着?
|
||||||
|
平均薪水最低的对应的等级一定是最低的.
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select avg(sal) as avgsal from emp group by deptno order by avgsal asc limit 1;
|
||||||
|
+-------------+
|
||||||
|
| avgsal |
|
||||||
|
+-------------+
|
||||||
|
| 1566.666667 |
|
||||||
|
+-------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select grade from salgrade where (select avg(sal) as avgsal from emp group by deptno order by avgsal asc limit 1) between losal and hisal;
|
||||||
|
+-------+
|
||||||
|
| grade |
|
||||||
|
+-------+
|
||||||
|
| 3 |
|
||||||
|
+-------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 8、取得比普通员工(员工代码没有在 mgr 字段上出现的) 的最高薪水还要高的领导人姓名
|
||||||
|
|
||||||
|
> 比“普通员工的最高薪水”还要高的一定是领导!
|
||||||
|
> 没毛病!!!!
|
||||||
|
|
||||||
|
```sql
|
||||||
|
mysql> select distinct mgr from emp where mgr is not null;
|
||||||
|
+------+
|
||||||
|
| mgr |
|
||||||
|
+------+
|
||||||
|
| 7902 |
|
||||||
|
| 7698 |
|
||||||
|
| 7839 |
|
||||||
|
| 7566 |
|
||||||
|
| 7788 |
|
||||||
|
| 7782 |
|
||||||
|
+------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
员工编号没有在以上范围内的都是普通员工。
|
||||||
|
|
||||||
|
第一步:找出普通员工的最高薪水!
|
||||||
|
not in 在使用的时候,后面小括号中记得排除NULL。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select max(sal) from emp where empno not in(select distinct mgr from emp where mgr is not null);
|
||||||
|
+----------+
|
||||||
|
| max(sal) |
|
||||||
|
+----------+
|
||||||
|
| 1600.00 |
|
||||||
|
+----------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
第二步:找出高于1600的
|
||||||
|
```sql
|
||||||
|
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));
|
||||||
|
+-------+---------+
|
||||||
|
| ename | sal |
|
||||||
|
+-------+---------+
|
||||||
|
| JONES | 2975.00 |
|
||||||
|
| BLAKE | 2850.00 |
|
||||||
|
| CLARK | 2450.00 |
|
||||||
|
| SCOTT | 3000.00 |
|
||||||
|
| KING | 5000.00 |
|
||||||
|
| FORD | 3000.00 |
|
||||||
|
+-------+---------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 9、取得薪水最高的前五名员工
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select ename,sal from emp order by sal desc limit 5;
|
||||||
|
+-------+---------+
|
||||||
|
| ename | sal |
|
||||||
|
+-------+---------+
|
||||||
|
| KING | 5000.00 |
|
||||||
|
| SCOTT | 3000.00 |
|
||||||
|
| FORD | 3000.00 |
|
||||||
|
| JONES | 2975.00 |
|
||||||
|
| BLAKE | 2850.00 |
|
||||||
|
+-------+---------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 10、取得薪水最高的第六到第十名员工
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select ename,sal from emp order by sal desc limit 5;
|
||||||
|
+-------+---------+
|
||||||
|
| ename | sal |
|
||||||
|
+-------+---------+
|
||||||
|
| KING | 5000.00 |
|
||||||
|
| SCOTT | 3000.00 |
|
||||||
|
| FORD | 3000.00 |
|
||||||
|
| JONES | 2975.00 |
|
||||||
|
| BLAKE | 2850.00 |
|
||||||
|
+-------+---------+
|
||||||
|
|
||||||
|
select ename,sal from emp order by sal desc limit 5, 5;
|
||||||
|
+--------+---------+
|
||||||
|
| ename | sal |
|
||||||
|
+--------+---------+
|
||||||
|
| CLARK | 2450.00 |
|
||||||
|
| ALLEN | 1600.00 |
|
||||||
|
| TURNER | 1500.00 |
|
||||||
|
| MILLER | 1300.00 |
|
||||||
|
| MARTIN | 1250.00 |
|
||||||
|
+--------+---------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 11 - 15
|
||||||
|
|
||||||
|
#### 11、取得最后入职的 5 名员工
|
||||||
|
|
||||||
|
日期也可以降序,升序。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select ename,hiredate from emp order by hiredate desc limit 5;
|
||||||
|
|
||||||
|
+--------+------------+
|
||||||
|
| ename | hiredate |
|
||||||
|
+--------+------------+
|
||||||
|
| ADAMS | 1987-05-23 |
|
||||||
|
| SCOTT | 1987-04-19 |
|
||||||
|
| MILLER | 1982-01-23 |
|
||||||
|
| FORD | 1981-12-03 |
|
||||||
|
| JAMES | 1981-12-03 |
|
||||||
|
+--------+------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 12、取得每个薪水等级有多少员工
|
||||||
|
|
||||||
|
分组 count
|
||||||
|
|
||||||
|
第一步:找出每个员工的薪水等级
|
||||||
|
```sql
|
||||||
|
select
|
||||||
|
e.ename,e.sal,s.grade
|
||||||
|
from
|
||||||
|
emp e
|
||||||
|
join
|
||||||
|
salgrade s
|
||||||
|
on
|
||||||
|
e.sal between s.losal and s.hisal;
|
||||||
|
+--------+---------+-------+
|
||||||
|
| ename | sal | grade |
|
||||||
|
+--------+---------+-------+
|
||||||
|
| SMITH | 800.00 | 1 |
|
||||||
|
| ALLEN | 1600.00 | 3 |
|
||||||
|
| WARD | 1250.00 | 2 |
|
||||||
|
| JONES | 2975.00 | 4 |
|
||||||
|
| MARTIN | 1250.00 | 2 |
|
||||||
|
| BLAKE | 2850.00 | 4 |
|
||||||
|
| CLARK | 2450.00 | 4 |
|
||||||
|
| SCOTT | 3000.00 | 4 |
|
||||||
|
| KING | 5000.00 | 5 |
|
||||||
|
| TURNER | 1500.00 | 3 |
|
||||||
|
| ADAMS | 1100.00 | 1 |
|
||||||
|
| JAMES | 950.00 | 1 |
|
||||||
|
| FORD | 3000.00 | 4 |
|
||||||
|
| MILLER | 1300.00 | 2 |
|
||||||
|
+--------+---------+-------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
第二步:继续按照grade分组统计数量
|
||||||
|
```sql
|
||||||
|
select
|
||||||
|
s.grade ,count(*)
|
||||||
|
from
|
||||||
|
emp e
|
||||||
|
join
|
||||||
|
salgrade s
|
||||||
|
on
|
||||||
|
e.sal between s.losal and s.hisal
|
||||||
|
group by
|
||||||
|
s.grade;
|
||||||
|
|
||||||
|
+-------+----------+
|
||||||
|
| grade | count(*) |
|
||||||
|
+-------+----------+
|
||||||
|
| 1 | 3 |
|
||||||
|
| 2 | 3 |
|
||||||
|
| 3 | 2 |
|
||||||
|
| 4 | 5 |
|
||||||
|
| 5 | 1 |
|
||||||
|
+-------+----------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 13、面试题:
|
||||||
|
|
||||||
|
有 3 个表 S(学生表),C(课程表),SC(学生选课表)
|
||||||
|
S(SNO,SNAME)代表(学号,姓名)
|
||||||
|
C(CNO,CNAME,CTEACHER)代表(课号,课名,教师)
|
||||||
|
SC(SNO,CNO,SCGRADE)代表(学号,课号,成绩)
|
||||||
|
问题:
|
||||||
|
1,找出没选过“黎明”老师的所有学生姓名。
|
||||||
|
2,列出 2 门以上(含2 门)不及格学生姓名及平均成绩。
|
||||||
|
3,即学过 1 号课程又学过 2 号课所有学生的姓名。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 14、列出所有员工及领导的姓名
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select
|
||||||
|
a.ename '员工', b.ename '领导'
|
||||||
|
from
|
||||||
|
emp a
|
||||||
|
left join
|
||||||
|
emp b
|
||||||
|
on
|
||||||
|
a.mgr = b.empno;
|
||||||
|
|
||||||
|
+--------+-------+
|
||||||
|
| 员工 | 领导 |
|
||||||
|
+--------+-------+
|
||||||
|
| SMITH | FORD |
|
||||||
|
| ALLEN | BLAKE |
|
||||||
|
| WARD | BLAKE |
|
||||||
|
| JONES | KING |
|
||||||
|
| MARTIN | BLAKE |
|
||||||
|
| BLAKE | KING |
|
||||||
|
| CLARK | KING |
|
||||||
|
| SCOTT | JONES |
|
||||||
|
| KING | NULL |
|
||||||
|
| TURNER | BLAKE |
|
||||||
|
| ADAMS | SCOTT |
|
||||||
|
| JAMES | BLAKE |
|
||||||
|
| FORD | JONES |
|
||||||
|
| MILLER | CLARK |
|
||||||
|
+--------+-------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 15、列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称
|
||||||
|
|
||||||
|
```sql
|
||||||
|
emp a 员工表
|
||||||
|
emp b 领导表
|
||||||
|
a.mgr = b.empno and a.hiredate < b.hiredate
|
||||||
|
|
||||||
|
select
|
||||||
|
a.ename '员工', a.hiredate, b.ename '领导', b.hiredate, 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;
|
||||||
|
|
||||||
|
+-------+------------+-------+------------+------------+
|
||||||
|
| 员工 | hiredate | 领导 | hiredate | dname |
|
||||||
|
+-------+------------+-------+------------+------------+
|
||||||
|
| CLARK | 1981-06-09 | KING | 1981-11-17 | ACCOUNTING |
|
||||||
|
| SMITH | 1980-12-17 | FORD | 1981-12-03 | RESEARCH |
|
||||||
|
| JONES | 1981-04-02 | KING | 1981-11-17 | RESEARCH |
|
||||||
|
| ALLEN | 1981-02-20 | BLAKE | 1981-05-01 | SALES |
|
||||||
|
| WARD | 1981-02-22 | BLAKE | 1981-05-01 | SALES |
|
||||||
|
| BLAKE | 1981-05-01 | KING | 1981-11-17 | SALES |
|
||||||
|
+-------+------------+-------+------------+------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 16 - 20
|
||||||
|
#### 16、 列出部门名称和这些部门的员工信息, 同时列出那些没有员工的部门
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select
|
||||||
|
e.*,d.dname
|
||||||
|
from
|
||||||
|
emp e
|
||||||
|
right join
|
||||||
|
dept d
|
||||||
|
on
|
||||||
|
e.deptno = d.deptno;
|
||||||
|
|
||||||
|
+-------+--------+-----------+------+------------+---------+---------+--------+------------+
|
||||||
|
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO | dname |
|
||||||
|
+-------+--------+-----------+------+------------+---------+---------+--------+------------+
|
||||||
|
| 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 | ACCOUNTING |
|
||||||
|
| 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 | ACCOUNTING |
|
||||||
|
| 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 | ACCOUNTING |
|
||||||
|
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 | RESEARCH |
|
||||||
|
| 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 | RESEARCH |
|
||||||
|
| 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 | RESEARCH |
|
||||||
|
| 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 | RESEARCH |
|
||||||
|
| 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 | RESEARCH |
|
||||||
|
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 | SALES |
|
||||||
|
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 | SALES |
|
||||||
|
| 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 | SALES |
|
||||||
|
| 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 | SALES |
|
||||||
|
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 | SALES |
|
||||||
|
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 | SALES |
|
||||||
|
| NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | OPERATIONS |
|
||||||
|
+-------+--------+-----------+------+------------+---------+---------+--------+------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 17、列出至少有 5 个员工的所有部门
|
||||||
|
|
||||||
|
按照部门编号分组,计数,筛选出 >= 5
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select
|
||||||
|
deptno
|
||||||
|
from
|
||||||
|
emp
|
||||||
|
group by
|
||||||
|
deptno
|
||||||
|
having
|
||||||
|
count(*) >= 5;
|
||||||
|
|
||||||
|
+--------+
|
||||||
|
| deptno |
|
||||||
|
+--------+
|
||||||
|
| 20 |
|
||||||
|
| 30 |
|
||||||
|
+--------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 18、列出薪金比"SMITH" 多的所有员工信息
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select ename,sal from emp where sal > (select sal from emp where ename = 'SMITH');
|
||||||
|
+--------+---------+
|
||||||
|
| ename | sal |
|
||||||
|
+--------+---------+
|
||||||
|
| ALLEN | 1600.00 |
|
||||||
|
| WARD | 1250.00 |
|
||||||
|
| JONES | 2975.00 |
|
||||||
|
| MARTIN | 1250.00 |
|
||||||
|
| BLAKE | 2850.00 |
|
||||||
|
| CLARK | 2450.00 |
|
||||||
|
| SCOTT | 3000.00 |
|
||||||
|
| KING | 5000.00 |
|
||||||
|
| TURNER | 1500.00 |
|
||||||
|
| ADAMS | 1100.00 |
|
||||||
|
| JAMES | 950.00 |
|
||||||
|
| FORD | 3000.00 |
|
||||||
|
| MILLER | 1300.00 |
|
||||||
|
+--------+---------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 19、 列出所有"CLERK"( 办事员) 的姓名及其部门名称, 部门的人数
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select ename,job from emp where job = 'CLERK';
|
||||||
|
+--------+-------+
|
||||||
|
| ename | job |
|
||||||
|
+--------+-------+
|
||||||
|
| SMITH | CLERK |
|
||||||
|
| ADAMS | CLERK |
|
||||||
|
| JAMES | CLERK |
|
||||||
|
| MILLER | CLERK |
|
||||||
|
+--------+-------+
|
||||||
|
|
||||||
|
select
|
||||||
|
e.ename,e.job,d.dname
|
||||||
|
from
|
||||||
|
emp e
|
||||||
|
join
|
||||||
|
dept d
|
||||||
|
on
|
||||||
|
e.deptno = d.deptno
|
||||||
|
where
|
||||||
|
e.job = 'CLERK';
|
||||||
|
|
||||||
|
+--------+-------+------------+
|
||||||
|
| ename | job | dname |
|
||||||
|
+--------+-------+------------+
|
||||||
|
| MILLER | CLERK | ACCOUNTING |
|
||||||
|
| SMITH | CLERK | RESEARCH |
|
||||||
|
| ADAMS | CLERK | RESEARCH |
|
||||||
|
| JAMES | CLERK | SALES |
|
||||||
|
+--------+-------+------------+
|
||||||
|
|
||||||
|
select
|
||||||
|
e.ename,e.job,d.dname,d.deptno
|
||||||
|
from
|
||||||
|
emp e
|
||||||
|
join
|
||||||
|
dept d
|
||||||
|
on
|
||||||
|
e.deptno = d.deptno
|
||||||
|
where
|
||||||
|
e.job = 'CLERK';
|
||||||
|
|
||||||
|
+--------+-------+------------+--------+
|
||||||
|
| ename | job | dname | deptno |
|
||||||
|
+--------+-------+------------+--------+
|
||||||
|
| MILLER | CLERK | ACCOUNTING | 10 |
|
||||||
|
| SMITH | CLERK | RESEARCH | 20 |
|
||||||
|
| ADAMS | CLERK | RESEARCH | 20 |
|
||||||
|
| JAMES | CLERK | SALES | 30 |
|
||||||
|
+--------+-------+------------+--------+
|
||||||
|
|
||||||
|
|
||||||
|
//每个部门的人数?
|
||||||
|
select deptno, count(*) as deptcount from emp group by deptno;
|
||||||
|
+--------+-----------+
|
||||||
|
| deptno | deptcount |
|
||||||
|
+--------+-----------+
|
||||||
|
| 10 | 3 |
|
||||||
|
| 20 | 5 |
|
||||||
|
| 30 | 6 |
|
||||||
|
+--------+-----------+
|
||||||
|
|
||||||
|
select
|
||||||
|
t1.*,t2.deptcount
|
||||||
|
from
|
||||||
|
(select
|
||||||
|
e.ename,e.job,d.dname,d.deptno
|
||||||
|
from
|
||||||
|
emp e
|
||||||
|
join
|
||||||
|
dept d
|
||||||
|
on
|
||||||
|
e.deptno = d.deptno
|
||||||
|
where
|
||||||
|
e.job = 'CLERK') t1
|
||||||
|
join
|
||||||
|
(select deptno, count(*) as deptcount from emp group by deptno) t2
|
||||||
|
on
|
||||||
|
t1.deptno = t2.deptno;
|
||||||
|
|
||||||
|
+--------+-------+------------+--------+-----------+
|
||||||
|
| ename | job | dname | deptno | deptcount |
|
||||||
|
+--------+-------+------------+--------+-----------+
|
||||||
|
| MILLER | CLERK | ACCOUNTING | 10 | 3 |
|
||||||
|
| SMITH | CLERK | RESEARCH | 20 | 5 |
|
||||||
|
| ADAMS | CLERK | RESEARCH | 20 | 5 |
|
||||||
|
| JAMES | CLERK | SALES | 30 | 6 |
|
||||||
|
+--------+-------+------------+--------+-----------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 20、列出最低薪金大于 1500 的各种工作及从事此工作的全部雇员人数
|
||||||
|
|
||||||
|
按照工作岗位分组求最小值。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select job,count(*) from emp group by job having min(sal) > 1500;
|
||||||
|
|
||||||
|
+-----------+----------+
|
||||||
|
| job | count(*) |
|
||||||
|
+-----------+----------+
|
||||||
|
| ANALYST | 2 |
|
||||||
|
| MANAGER | 3 |
|
||||||
|
| PRESIDENT | 1 |
|
||||||
|
+-----------+----------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 21 - 25
|
||||||
|
|
||||||
|
#### 21、列出在部门"SALES"< 销售部> 工作的员工的姓名, 假定不知道销售部的部门编号.
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select ename from emp where deptno = (select deptno from dept where dname = 'SALES');
|
||||||
|
|
||||||
|
+--------+
|
||||||
|
| ename |
|
||||||
|
+--------+
|
||||||
|
| ALLEN |
|
||||||
|
| WARD |
|
||||||
|
| MARTIN |
|
||||||
|
| BLAKE |
|
||||||
|
| TURNER |
|
||||||
|
| JAMES |
|
||||||
|
+--------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 22、列出薪金高于公司平均薪金的所有员工, 所在部门, 上级领导, 雇员的工资等级.
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select
|
||||||
|
e.ename '员工',d.dname,l.ename '领导',s.grade
|
||||||
|
from
|
||||||
|
emp e
|
||||||
|
join
|
||||||
|
dept d
|
||||||
|
on
|
||||||
|
e.deptno = 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);
|
||||||
|
|
||||||
|
+-------+------------+-------+-------+
|
||||||
|
| 员工 | dname | 领导 | grade |
|
||||||
|
+-------+------------+-------+-------+
|
||||||
|
| JONES | RESEARCH | KING | 4 |
|
||||||
|
| BLAKE | SALES | KING | 4 |
|
||||||
|
| CLARK | ACCOUNTING | KING | 4 |
|
||||||
|
| SCOTT | RESEARCH | JONES | 4 |
|
||||||
|
| KING | ACCOUNTING | NULL | 5 |
|
||||||
|
| FORD | RESEARCH | JONES | 4 |
|
||||||
|
+-------+------------+-------+-------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 23、 列出与"SCOTT" 从事相同工作的所有员工及部门名称
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select job from emp where ename = 'SCOTT';
|
||||||
|
+---------+
|
||||||
|
| job |
|
||||||
|
+---------+
|
||||||
|
| ANALYST |
|
||||||
|
+---------+
|
||||||
|
|
||||||
|
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';
|
||||||
|
|
||||||
|
+-------+---------+----------+
|
||||||
|
| ename | job | dname |
|
||||||
|
+-------+---------+----------+
|
||||||
|
| FORD | ANALYST | RESEARCH |
|
||||||
|
+-------+---------+----------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 24、列出薪金等于部门 30 中员工的薪金的其他员工的姓名和薪金.
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select distinct sal from emp where deptno = 30;
|
||||||
|
+---------+
|
||||||
|
| sal |
|
||||||
|
+---------+
|
||||||
|
| 1600.00 |
|
||||||
|
| 1250.00 |
|
||||||
|
| 2850.00 |
|
||||||
|
| 1500.00 |
|
||||||
|
| 950.00 |
|
||||||
|
+---------+
|
||||||
|
|
||||||
|
select
|
||||||
|
ename,sal
|
||||||
|
from
|
||||||
|
emp
|
||||||
|
where
|
||||||
|
sal in(select distinct sal from emp where deptno = 30)
|
||||||
|
and
|
||||||
|
deptno <> 30;
|
||||||
|
|
||||||
|
Empty set (0.00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 25、列出薪金高于在部门 30 工作的所有员工的薪金的员工姓名和薪金. 部门名称
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select max(sal) from emp where deptno = 30;
|
||||||
|
+----------+
|
||||||
|
| max(sal) |
|
||||||
|
+----------+
|
||||||
|
| 2850.00 |
|
||||||
|
+----------+
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
+-------+---------+------------+
|
||||||
|
| ename | sal | dname |
|
||||||
|
+-------+---------+------------+
|
||||||
|
| KING | 5000.00 | ACCOUNTING |
|
||||||
|
| JONES | 2975.00 | RESEARCH |
|
||||||
|
| SCOTT | 3000.00 | RESEARCH |
|
||||||
|
| FORD | 3000.00 | RESEARCH |
|
||||||
|
+-------+---------+------------+
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 26 - 30
|
||||||
|
|
||||||
|
#### 26、列出在每个部门工作的员工数量, 平均工资和平均服务期限
|
||||||
|
|
||||||
|
没有员工的部门,部门人数是 0
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select
|
||||||
|
d.deptno, count(e.ename) ecount,ifnull(avg(e.sal),0) as avgsal, if null(avg(timestampdiff(YEAR, hiredate, now())), 0) as avgservicetime
|
||||||
|
from
|
||||||
|
emp e
|
||||||
|
right join
|
||||||
|
dept d
|
||||||
|
on
|
||||||
|
e.deptno = d.deptno
|
||||||
|
group by
|
||||||
|
d.deptno;
|
||||||
|
|
||||||
|
+--------+--------+-------------+----------------+
|
||||||
|
| deptno | ecount | avgsal | avgservicetime |
|
||||||
|
+--------+--------+-------------+----------------+
|
||||||
|
| 10 | 3 | 2916.666667 | 38.0000 |
|
||||||
|
| 20 | 5 | 2175.000000 | 35.8000 |
|
||||||
|
| 30 | 6 | 1566.666667 | 38.3333 |
|
||||||
|
| 40 | 0 | 0.000000 | 0.0000 |
|
||||||
|
+--------+--------+-------------+----------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
在 mysql 当中怎么计算两个日期的“年差”,差了多少年?
|
||||||
|
TimeStampDiff (间隔类型, 前一个日期, 后一个日期)
|
||||||
|
|
||||||
|
```sql
|
||||||
|
timestampdiff(YEAR, hiredate, now())
|
||||||
|
|
||||||
|
间隔类型:
|
||||||
|
SECOND 秒,
|
||||||
|
MINUTE 分钟,
|
||||||
|
HOUR 小时,
|
||||||
|
DAY 天,
|
||||||
|
WEEK 星期
|
||||||
|
MONTH 月,
|
||||||
|
QUARTER 季度,
|
||||||
|
YEAR 年
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 27、 列出所有员工的姓名、部门名称和工资。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select
|
||||||
|
e.ename,d.dname,e.sal
|
||||||
|
from
|
||||||
|
emp e
|
||||||
|
join
|
||||||
|
dept d
|
||||||
|
on
|
||||||
|
e.deptno = d.deptno;
|
||||||
|
|
||||||
|
+--------+------------+---------+
|
||||||
|
| ename | dname | sal |
|
||||||
|
+--------+------------+---------+
|
||||||
|
| CLARK | ACCOUNTING | 2450.00 |
|
||||||
|
| KING | ACCOUNTING | 5000.00 |
|
||||||
|
| MILLER | ACCOUNTING | 1300.00 |
|
||||||
|
| SMITH | RESEARCH | 800.00 |
|
||||||
|
| JONES | RESEARCH | 2975.00 |
|
||||||
|
| SCOTT | RESEARCH | 3000.00 |
|
||||||
|
| ADAMS | RESEARCH | 1100.00 |
|
||||||
|
| FORD | RESEARCH | 3000.00 |
|
||||||
|
| ALLEN | SALES | 1600.00 |
|
||||||
|
| WARD | SALES | 1250.00 |
|
||||||
|
| MARTIN | SALES | 1250.00 |
|
||||||
|
| BLAKE | SALES | 2850.00 |
|
||||||
|
| TURNER | SALES | 1500.00 |
|
||||||
|
| JAMES | SALES | 950.00 |
|
||||||
|
+--------+------------+---------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 28、列出所有部门的详细信息和人数
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select
|
||||||
|
d.deptno,d.dname,d.loc,count(e.ename)
|
||||||
|
from
|
||||||
|
emp e
|
||||||
|
right join
|
||||||
|
dept d
|
||||||
|
on
|
||||||
|
e.deptno = d.deptno
|
||||||
|
group by
|
||||||
|
d.deptno,d.dname,d.loc;
|
||||||
|
|
||||||
|
+--------+------------+----------+----------------+
|
||||||
|
| deptno | dname | loc | count(e.ename) |
|
||||||
|
+--------+------------+----------+----------------+
|
||||||
|
| 10 | ACCOUNTING | NEW YORK | 3 |
|
||||||
|
| 20 | RESEARCH | DALLAS | 5 |
|
||||||
|
| 30 | SALES | CHICAGO | 6 |
|
||||||
|
| 40 | OPERATIONS | BOSTON | 0 |
|
||||||
|
+--------+------------+----------+----------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 29、列出各种工作的最低工资及从事此工作的雇员姓名
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select
|
||||||
|
job,min(sal) as minsal
|
||||||
|
from
|
||||||
|
emp
|
||||||
|
group by
|
||||||
|
job;
|
||||||
|
|
||||||
|
+-----------+----------+
|
||||||
|
| job | minsal |
|
||||||
|
+-----------+----------+
|
||||||
|
| ANALYST | 3000.00 |
|
||||||
|
| CLERK | 800.00 |
|
||||||
|
| MANAGER | 2450.00 |
|
||||||
|
| PRESIDENT | 5000.00 |
|
||||||
|
| SALESMAN | 1250.00 |
|
||||||
|
+-----------+----------+
|
||||||
|
|
||||||
|
emp e 和以上 t 连接
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
+--------+-----------+---------+
|
||||||
|
| ename | job | minsal |
|
||||||
|
+--------+-----------+---------+
|
||||||
|
| SMITH | CLERK | 800.00 |
|
||||||
|
| WARD | SALESMAN | 1250.00 |
|
||||||
|
| MARTIN | SALESMAN | 1250.00 |
|
||||||
|
| CLARK | MANAGER | 2450.00 |
|
||||||
|
| SCOTT | ANALYST | 3000.00 |
|
||||||
|
| KING | PRESIDENT | 5000.00 |
|
||||||
|
| FORD | ANALYST | 3000.00 |
|
||||||
|
+--------+-----------+---------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 30、列出各个部门的 MANAGER( 领导) 的最低薪金
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select
|
||||||
|
deptno, min(sal)
|
||||||
|
from
|
||||||
|
emp
|
||||||
|
where
|
||||||
|
job = 'MANAGER'
|
||||||
|
group by
|
||||||
|
deptno;
|
||||||
|
|
||||||
|
+--------+----------+
|
||||||
|
| deptno | min(sal) |
|
||||||
|
+--------+----------+
|
||||||
|
| 10 | 2450.00 |
|
||||||
|
| 20 | 2975.00 |
|
||||||
|
| 30 | 2850.00 |
|
||||||
|
+--------+----------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 30 - 34
|
||||||
|
#### 31、列出所有员工的 年工资, 按 年薪从低到高排序
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select
|
||||||
|
ename,(sal + ifnull(comm,0)) * 12 as yearsal
|
||||||
|
from
|
||||||
|
emp
|
||||||
|
order by
|
||||||
|
yearsal asc;
|
||||||
|
|
||||||
|
+--------+----------+
|
||||||
|
| ename | yearsal |
|
||||||
|
+--------+----------+
|
||||||
|
| SMITH | 9600.00 |
|
||||||
|
| JAMES | 11400.00 |
|
||||||
|
| ADAMS | 13200.00 |
|
||||||
|
| MILLER | 15600.00 |
|
||||||
|
| TURNER | 18000.00 |
|
||||||
|
| WARD | 21000.00 |
|
||||||
|
| ALLEN | 22800.00 |
|
||||||
|
| CLARK | 29400.00 |
|
||||||
|
| MARTIN | 31800.00 |
|
||||||
|
| BLAKE | 34200.00 |
|
||||||
|
| JONES | 35700.00 |
|
||||||
|
| FORD | 36000.00 |
|
||||||
|
| SCOTT | 36000.00 |
|
||||||
|
| KING | 60000.00 |
|
||||||
|
+--------+----------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 32、求出员工领导的薪水超过3000的员工名称与领导
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select
|
||||||
|
a.ename '员工',b.ename '领导'
|
||||||
|
from
|
||||||
|
emp a
|
||||||
|
join
|
||||||
|
emp b
|
||||||
|
on
|
||||||
|
a.mgr = b.empno
|
||||||
|
where
|
||||||
|
b.sal > 3000;
|
||||||
|
|
||||||
|
+-------+------+
|
||||||
|
| 员工 | 领导 |
|
||||||
|
+-------+------+
|
||||||
|
| JONES | KING |
|
||||||
|
| BLAKE | KING |
|
||||||
|
| CLARK | KING |
|
||||||
|
+-------+------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 33、求出部门名称中, 带'S'字符的部门员工的工资合计、部门人数
|
||||||
|
|
||||||
|
```sql
|
||||||
|
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.dname,d.loc;
|
||||||
|
|
||||||
|
+--------+------------+---------+----------------+----------+
|
||||||
|
| deptno | dname | loc | count(e.ename) | sumsal |
|
||||||
|
+--------+------------+---------+----------------+----------+
|
||||||
|
| 20 | RESEARCH | DALLAS | 5 | 10875.00 |
|
||||||
|
| 30 | SALES | CHICAGO | 6 | 9400.00 |
|
||||||
|
| 40 | OPERATIONS | BOSTON | 0 | 0.00 |
|
||||||
|
+--------+------------+---------+----------------+----------+
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 34、给任职日期超过 30 年的员工加薪 10%.
|
||||||
|
|
||||||
|
```sql
|
||||||
|
update emp set sal = sal * 1.1 where timestampdiff(YEAR, hiredate, now()) > 30;
|
||||||
|
```
|
||||||
Reference in new issue
Block a user