声明:其中大概有错误的地方 希望大佬指出来

set foreign_key_checks = 0;

drop database if exists employee;

create database employee;

use employee;

create table dept
(

`deptno` int(2) not null comment '部门编号',`dname`  varchar(14) default null comment '部门名称',`loc`    varchar(13) default null comment '部门地址',primary key (`deptno`)

) comment =‘部门表’;

insert into dept
values (10, ‘ACCOUNTING’, ‘NEW YORK’),
(20, ‘RESEARCH’, ‘DALLAS’),
(30, ‘SALES’, ‘CHICAGO’),
(40, ‘OPERATIONS’, ‘BOSTON’),
(50, ‘HR’, ‘SY’),
(60, NULL, ‘MARKET’);

create table emp
(

`empno`    int(4) not null comment '员工编号',`ename`    varchar(20)  default null comment '员工姓名',`job`      varchar(9)   default null comment '工作',`mgr`      int(4)       default null comment '领导编号',`hiredate` date         default null comment '入职时间',`sal`      double(7, 2) default null comment '薪水',`comm`     double(7, 2) default null comment '佣金',`deptno`   int(2)       default null comment '部门编号',primary key (`empno`)

) comment =‘员工表’;

insert into emp
values (7369, ‘SMITH’, ‘CLERK’, 7902, ‘1980-12-17’, 800.00, NULL, 20),
(7499, ‘ALLEN’, ‘SALESMAN’, 7698, ‘1981-02-20’, 1600.00, 300.00, 30),
(7521, ‘WARD’, ‘SALESMAN’, 7698, ‘1981-02-22’, 1250.00, 500.00, 30),
(7566, ‘JONES’, ‘MANAGER’, 7839, ‘1981-04-02’, 2975.00, NULL, 20),
(7654, ‘MARTIN’, ‘SALESMAN’, 7698, ‘1981-09-28’, 1250.00, 1400.00, 30),
(7698, ‘BLAKE’, ‘MANAGER’, 7839, ‘1981-05-01’, 2850.00, NULL, 30),
(7782, ‘CLARK’, ‘MANAGER’, 7839, ‘1981-06-09’, 2450.00, NULL, 10),
(7788, ‘SCOTT’, ‘ANALYST’, 7566, ‘1987-04-19’, 3000.00, NULL, 20),
(7839, ‘KING’, ‘PRESIDENT’, NULL, ‘1981-11-17’, 5000.00, NULL, 10),
(7844, ‘TURNER’, ‘SALESMAN’, 7698, ‘1981-09-08’, 1500.00, 0.00, 30),
(7876, ‘ADAMS’, ‘CLERK’, 7788, ‘1987-05-23’, 1100.00, NULL, 20),
(7900, ‘JAMES’, ‘CLERK’, 7698, ‘1981-12-03’, 950.00, NULL, 30),
(7902, ‘FORD’, ‘ANALYST’, 7566, ‘1981-12-03’, 3000.00, NULL, 20),
(7934, ‘MILLER’, ‘CLERK’, 7782, ‘1982-01-23’, 1300.00, NULL, 10);

create table salgrade
(

`grade` int(11) default null comment '工资等级',`losal` int(11) default null comment '最低工资',`hisal` int(11) default null comment '最高工资'

) comment =‘工资等级表’;

insert into salgrade
values (1, 700, 1200),
(2, 1201, 1400),
(3, 1401, 2000),
(4, 2001, 3000),
(5, 3001, 9999);

1、取得每个部门最高薪水的人员名称

select ename, e.deptno, a.maxsal
from (select e.deptno, max(sal) as maxsal
from emp e
group by deptno) as a
join emp e
on a.deptno = e.deptno and a.maxsal = e.sal;

#2、哪些人的薪水在部门的平均薪水之上
select ename, sal, e.deptno, a.avgsal
from (select avg(sal) as avgsal, e.deptno from emp e group by e.deptno) as a
join emp e on e.deptno = a.deptno and e.sal > a.avgsal;

#3.1 取得部门中(所有人)平均薪水的等级
select a.deptno, a.avgsal, grade
from (select avg(sal) as avgsal, e.deptno from emp e group by e.deptno) as a
join salgrade s on a.avgsal between s.losal and s.hisal;

#3.2 取得部门中(所有人)薪水的平均等级
select a.ename, a.sal, a.deptno, s.grade
from (select ename, sal, deptno from emp order by deptno) as a
join salgrade s on a.sal between s.losal and s.hisal;
| ename | sal | deptno | grade |

| MILLER | 1300.00 | 10 | 2 |

| KING | 5000.00 | 10 | 5 |

| CLARK | 2450.00 | 10 | 4 |

| ADAMS | 1100.00 | 20 | 1 |

| SCOTT | 3000.00 | 20 | 4 |

| FORD | 3000.00 | 20 | 4 |

| JONES | 2975.00 | 20 | 4 |

| SMITH | 800.00 | 20 | 1 |

| MARTIN | 1250.00 | 30 | 2 |

| ALLEN | 1600.00 | 30 | 3 |

| JAMES | 950.00 | 30 | 1 |

| BLAKE | 2850.00 | 30 | 4 |

| WARD | 1250.00 | 30 | 2 |

| TURNER | 1500.00 | 30 | 3 |

#4、不用组函数(MAX),取得最高薪水
select sal
from emp
order by sal desc
limit 1;

select sal
from emp
where sal not in
(select A.sal
from emp A,
emp B
where A.sal < B.sal);
#5、取得平均薪水最高的部门的编号
select deptno, max(avgsal)
from (select avg(sal) as avgsal, deptno from emp e group by e.deptno) as a
|deptno | avgsal |

| 10 | 2916.666667 |

#6、取得平均薪水最高的部门的部门名称
select d.dname, max(avgsal)
from (select avg(sal) as avgsal, deptno from emp e group by e.deptno) as a
join dept d on d.deptno = a.deptno;
| dname | avgsal |

| ACCOUNTING | 2916.666667 |

#7、求平均薪水的等级最高的部门的部门名称

select d.dname, a.avgsal, s.grade
from (select avg(sal) as avgsal, e.deptno from emp e group by e.deptno) as a
join salgrade s on a.avgsal between s.losal and s.hisal
join dept d on d.deptno = a.deptno;

| dname | avgsal | grade |

| ACCOUNTING | 2916.666667 | 4 |

| RESEARCH | 2175.000000 | 4 |

#8、取得比普通员工的最高薪水还要高的领导人姓名
select empno from emp where empno=mgr;
select e.ename,e.sal
from emp e
join (select max(sal) as maxsal from emp e2
where e2.empno not in(select empno from emp e3
join (select mgr from emp) as b
on e3.empno=b.mgr group by empno)) as a
on e.sal>a.maxsal;
| ename | sal |

| JONES | 2975.00 |

| BLAKE | 2850.00 |

| CLARK | 2450.00 |

| SCOTT | 3000.00 |

| KING | 5000.00 |

| FORD | 3000.00 |

#9、取得薪水最高的前五名员工
select ename,sal
from emp order by sal desc limit 5;
| ename | sal |

| KING | 5000.00 |

| FORD | 3000.00 |

| SCOTT | 3000.00 |

| JONES | 2975.00 |

| BLAKE | 2850.00 |

#10、取得薪水最高的第六名到第十名。
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 |

| WARD | 1250.00 |

#11、取得最后入职的五名员工
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 |

| JAMES | 1981-12-03 |

| FORD | 1981-12-03 |

#12、取得每个薪水等级有多少员工
select grade,count() from salgrade s,(select * from emp where sal) as e
where e.sal between s.losal and s.losal
group by grade;
select grade,count(
) from salgrade s,(select * from emp where sal) e
where e.sal between s.losal and s.hisal
group by grade;
| grade | count(*) |

| 1 | 3 |

| 2 | 3 |

| 3 | 2 |

| 4 | 5 |

| 5 | 1 |

#14、列出所有员工及领导名字
select e3.ename,b.leardername from emp e3 left join(select ename as leardername from emp e
join (select mgr from emp e2 )as a
on e.empno=a.mgr group by empno) as b
on e3.ename=b.leardername;
±--------±------------+

| empname | leardername |

±--------±------------+

| SMITH | FORD |

| ALLEN | BLAKE |

| WARD | BLAKE |

| JONES | KING |

| MARTIN | BLAKE |

| BLAKE | KING |

| CLARK | KING |

| SCOTT | JONES |

| TURNER | BLAKE |

| ADAMS | SCOTT |

| JAMES | BLAKE |

| FORD | JONES |

| MILLER | CLARK |

±--------±------------+

#15、列出受雇日期早于其直接上级领导的所有员工编号,姓名、部门名称
select e3.empno,e3.ename,d.dname from emp e3
left join emp e on e3.mgr=e.empno
left join dept d on e3.deptno=d.deptno
where e3.hiredate<e.hiredate;

| 员工编号 | 员工姓名 | 员工入职日期 | 领导编号 | 领导姓名 | 领导入职日期 | 部门名称 |

| 7369 | SMITH | 1980-12-17 | 7902 | FORD | 1981-12-03 | RESEARCH |

| 7499 | ALLEN | 1981-02-20 | 7698 | BLAKE | 1981-05-01 | SALES |

| 7521 | WARD | 1981-02-22 | 7698 | BLAKE | 1981-05-01 | SALES |

| 7566 | JONES | 1981-04-02 | 7839 | KING | 1981-11-17 | RESEARCH |

| 7698 | BLAKE | 1981-05-01 | 7839 | KING | 1981-11-17 | SALES |

| 7782 | CLARK | 1981-06-09 | 7839 | KING | 1981-11-17 | ACCOUNTING |

#16、列出部门名称和这些员工信息同时列出那些没有员工的部门
select d.dname,e.*,d.dname
from dept d,emp e,(select * from dept where deptno not in(select deptno from emp)) a
where d.deptno=e.deptno ;

#17、列出至少有五个员工的部门详细信息
select d.*
from dept d,emp e
where d.deptno=e.deptno group by e.deptno having count(e.deptno)>=5;

#18、列出薪金比“SMITH”多的所有员工
select ename
from emp where sal>(select sal from emp where ename=‘SMITH’);

#19、列出所有“CLERK”(办事员)的姓名及其部门名称,部门人数
select e.ename,d.dname,a.co from emp e
left join dept d on e.deptno = d.deptno
left join (select count(*) as co ,deptno from emp group by deptno) a
on a.deptno=d.deptno
where e.job=‘CLERK’;

±-------±-----------±---------+

| ename | dname | totalEmp |

±-------±-----------±---------+

| SMITH | RESEARCH | 5 |

| ADAMS | RESEARCH | 5 |

| JAMES | SALES | 6 |

| MILLER | ACCOUNTING | 3 |

±-------±-----------±---------+

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

±----------±---------±---------+

| job | min(sal) | totalEmp |

±----------±---------±---------+

| ANALYST | 3000.00 | 2 |

| MANAGER | 2450.00 | 3 |

| PRESIDENT | 5000.00 | 1 |

±----------±---------±---------+

#21、列出部门在“SALES”<销售部>工作的姓名,假定不知道销售部的部门的部门编号
select ename from emp where deptno=(select deptno from dept where dname=‘SALES’);

±-------+

| ename |

±-------+

| ALLEN |

| WARD |

| MARTIN |

| BLAKE |

| TURNER |

| JAMES |

±-------+

#22、列出薪金高于公司平均薪金的所有员工、所在的部门、上级领导、雇员的工资等级
select e.ename,e.deptno,e2.ename,s.grade from (select * from salgrade) s,emp e
left join emp e2
on e.mgr=e2.empno
where e.sal>(select avg(sal) from emp)
and e.sal between s.losal and s.hisal;

±--------±-------±------------±------+

| empname | deptno | leardername | grade |

±--------±-------±------------±------+

| JONES | 20 | KING | 4 |

| BLAKE | 30 | KING | 4 |

| CLARK | 10 | KING | 4 |

| SCOTT | 20 | JONES | 4 |

| KING | 10 | NULL | 5 |

| FORD | 20 | JONES | 4 |

±--------±-------±------------±------+

#23、列出所有与“SCOTT”从事相同工作的所有员工及部门名称
select e.ename,e.job,d.dname
from emp e
join(select job from emp where ename=‘SCOTT’) as a
join dept d
on e.job=a.job and e.deptno=d.deptno ;
±------±--------±---------+

| ename | job | dname |

±------±--------±---------+

| FORD | ANALYST | RESEARCH |

±------±--------±---------+

#24、列出薪金等于部门20中员工薪金的其他员工的姓名和薪金
select e.ename,a.sal
from emp e
join (select sal from emp e where deptno=20) as a
on e.sal=a.sal group by a.sal, e.ename;
#25、列出薪金高于在30部门工作的所有员工的薪金的员工姓名和薪金,部门名称
select e.ename,e.sal,d.dname
from emp e,dept d,(select max(sal) as maxsal from emp where deptno=30) as a
where e.deptno=d.deptno and e.sal>a.maxsal group by e.ename;
±------±--------±-----------+

| ename | sal | dname |

±------±--------±-----------+

| JONES | 2975.00 | RESEARCH |

| SCOTT | 3000.00 | RESEARCH |

| KING | 5000.00 | ACCOUNTING |

| FORD | 3000.00 | RESEARCH |

±------±--------±-----------+

#26、列出每个部门工作的员工数量,平均工资、平均服务期限
select d.deptno as ‘部门编号’,a.count as ‘员工数量’,a.avgyear as ‘平均服务期限’
from dept d left join
(select count(*) as count,avg(sal) as avgsal,avg(year(curdate())-year(hiredate)) as avgyear,deptno
from emp group by deptno) as a
on d.deptno= a.deptno;

±-------------±-------------±-------------±-------------+

| 部门编号 | 员工数量 | 平均工资 | 服务期限 |

±-------------±-------------±-------------±-------------+

| 10 | 3 | 2916.666667 | 35.93793333 |

| 20 | 5 | 2175.000000 | 33.96494000 |

| 30 | 6 | 1566.666667 | 36.23651667 |

| 40 | 0 | 0.000000 | 0.00000000 |

| 50 | 0 | 0.000000 | 0.00000000 |

| 60 | 0 | 0.000000 | 0.00000000 |

±-------------±-------------±-------------±-------------+

#27、列出所有员工的姓名、部门名称、工资
select e.ename,d.dname,e.sal
from emp e
join dept d on e.deptno = d.deptno;

#28、列出所有部门的详细信息和人数
select d.deptno,d.dname,d.loc,a.count
from dept d
left join (select count(ename) as count,deptno from emp group by deptno ) as a
on d.deptno=a.deptno ;

±-------±-----------±---------±---------------+

| deptno | dname | loc | count(e.ename) |

±-------±-----------±---------±---------------+

| 10 | ACCOUNTING | NEW YORK | 3 |

| 20 | RESEARCH | DALLAS | 5 |

| 30 | SALES | CHICAGO | 6 |

| 40 | OPERATIONS | BOSTON | 0 |

| 50 | HR | SY | 0 |

| 60 | NULL | MARKET | 0 |

±-------±-----------±---------±---------------+

#29、列出各种工作的最低工资及从事此工作的雇员姓名
select ename,j.job,j.minsal
from emp,(select min(sal) as minsal,job from emp group by job) as j
where emp.job=j.job and emp.sal=j.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的最低薪金
select deptno,min(sal) as minsal
from emp
where job='MANAGER’group by deptno;
±-------±--------+

| deptno | minsal |

±-------±--------+

| 10 | 2450.00 |

| 20 | 2975.00 |

| 30 | 2850.00 |

±-------±--------+

#31、列出所有员工的年工资,按年薪从低到高排序
select ename,sal*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 |

| SCOTT | 36000.00 |

| FORD | 36000.00 |

| KING | 60000.00 |

±-------±---------+

#32、求出员工领导的薪水超过3000的员工姓名和领导名称
select e.ename,e.sal,e2.ename,e2.sal from emp e
left join emp e2
on e.mgr=e2.empno
where e2.sal>3000;
±-------------±-------------±-------------±-------------+

| 员工姓名 | 员工薪水 | 领导姓名 | 领导薪水 |

±-------------±-------------±-------------±-------------+

| JONES | 2975.00 | KING | 5000.00 |

| BLAKE | 2850.00 | KING | 5000.00 |

| CLARK | 2450.00 | KING | 5000.00 |

±-------------±-------------±-------------±-------------+

#33、求出部门名称中带“S”字符的部门员工的工资合计,部门人数
select d.dname as ‘部门名称’,sum(e.sal) as ‘工资合计’,count(*)
from emp e,dept d
where e.deptno=d.deptno
and d.dname like ‘%S%’ group by d.deptno;
±-------------±-------------±-------------+

| 部门名称 | 工资合计 | 部门人数 |

±-------------±-------------±-------------+

| OPERATIONS | 0.00 | 0 |

| RESEARCH | 10875.00 | 5 |

| SALES | 9400.00 | 6 |

±-------------±-------------±-------------+

#34、(复制表emp生成emp_bak表),在emp_bak中给任职超过30年的员工加薪10%

复制表

create table emp_bak select * from emp;
update emp_bak set sal=sal*1.1 where (DATE(CURDATE())-hiredate)>30;

通过下面语句创建employee数据库和dept(部门表)、emp(员工表)、salgrade(工资等级表)34题相关推荐

  1. 使用SQL语句创建基本数据库

    SQL语句代码:CREATE DATABASE 语句. CREATE DATABASE Epiphany ON (NAME = Epiphany,FILENAME = 'E:\SQL SERVER 2 ...

  2. 数据库SQL语句 创建一个数据库,创建表,并添加约束

    USE master Go 进入master模式 创建数据库 USE master GOCREATE DATABASE TestData ON PRIMARY (Name = 'TestData',F ...

  3. Oracle PL/SQL块 多表查询(emp员工表、dept部门表、salgrade工资等级表)

    范例: 查询每个员工的编号,姓名,职位,工资,工资等级,部门名称●确定要使用的数据表|- emp表:员工的编号.姓名.职位.工资|- salgrade表:工资等级|- dept表:部门名称●确定已知的 ...

  4. sql语句创建mysql数据库常见错误以及解决方法

    Error Code: 1366. Incorrect string value: '\xE5\xAD\xA6\xE5\xB7\xA5...'     将该表中的每一列的字符集都改为utf-8    ...

  5. Mysql sql语句创建myschool数据库

    -- 创建 student 库 四个表格 # 如果表`grade`存在则删除 DROP TABLE IF EXISTS `grade`;  # 创建`grade`表 CREATE TABLE `gra ...

  6. 用SQL语句创建数据库和表

    --------创建数据库 ----use master ----GO----IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE nam ...

  7. php mysql数据库 指南_用 PHP 创建 MySQL 数据库

    创建一个数据库 创建和删除数据库你应该有管理特权.它很容易创建一个新的 MySQL 数据库.PHP 使用 mysql_query 函数创建一个MySQL 数据库.这个函数接受两个参数执行成功并返回 T ...

  8. mysql2005备份_创建完整数据库备份 - SQL Server | Microsoft Docs

    完整数据库备份Create a Full Database Backup 09/12/2019 本文内容 适用于:Applies to: SQL ServerSQL Server(所有支持的版本)SQ ...

  9. 合肥工业大学—SQL Server数据库实验三:SQL语句创建和删除基本表

    SQL语句创建和删除基本表 1. 编写6个基本表 2. 修改基本表结构,完整性约束条件 3. 用Drop table 语句删除基本表 1. 编写6个基本表 设有简单教学管理的6个关系模式如下: 系(系 ...

最新文章

  1. sap data service安装方法
  2. C# Winform 通过FlowLayoutPanel及自定义的编辑控件,实现快速构建C/S版的编辑表单页面...
  3. 各品牌交换机常用命令整理
  4. ASP.NET Core Controller与IOC的羁绊
  5. Koa项目搭建过程详细记录
  6. 阿里小米获运营商牌照;罗永浩吐槽苹果;谷歌曾私下求情欧盟 | 极客头条
  7. 每天一道面试题(2):实现strncpy
  8. 详解卷积神经网络(CNN)在语音识别中的应用
  9. Linux - ATT汇编基础
  10. CMPP3.0协议(移动)
  11. 用svg矢量图实现动画效果
  12. youtube-dl 下载 playlist 命令
  13. java 背单词系统_快速高效背单词系统方法论
  14. python 无法使用Ctrl-C终止Python脚本(ctrl+c 退出while True)
  15. TL-R402M路由器恢复出厂设置方法
  16. 给csdn童鞋们的一封信 (csdn为什么不能粘贴图片写博客?)
  17. Wow魔兽世界服务器搭建详细教程,魔兽世界服务器配置要求
  18. 初识物联网开发-硬件开发板选择
  19. 计算机u盘驱动坏了如何的修复,U盘损坏怎么恢复?学会这两招,快速恢复里面的文件...
  20. kettle 提交数据量_基于kettle工具提高表输出写入速度(每秒万条记录)

热门文章

  1. 内网渗透-内网代理穿透和内网横向移动
  2. OSChina 周二乱弹 ——室友开始买假发女装了
  3. php 5.4 opcode,PHP Opcode缓存总结
  4. matlab设计椭圆低通滤波器,【 MATLAB 】ellip 函数介绍(椭圆滤波器设计)
  5. perl中unicode属性
  6. Kotlin入门-数据类与密封类 的解脱,由繁至简
  7. pytho运算符练习
  8. 图像风格迁移cvpr2020_浅谈风格迁移(二)任意风格迁移
  9. {转载}circos绘图(3)
  10. 【源码】基于PMSG的风力发电机组仿真与建模