【MySQL多表查询练习】

新增员工表emp和部门表dept
create table dept (dept1 int ,dept_name varchar(11));
create table emp (sid int ,name varchar(11),age int,worktime_start date,incoming int,dept2 int);

 insert into dept values
(101,'财务'),
(102,'销售'),
(103,'IT技术'),
(104,'行政');

 insert into emp values
(1789,'张三',35,'1980/1/1',4000,101),
(1674,'李四',32,'1983/4/1',3500,101),
(1776,'王五',24,'1990/7/1',2000,101),
(1568,'赵六',57,'1970/10/11',7500,102),
(1564,'荣七',64,'1963/10/11',8500,102),
(1879,'牛八',55,'1971/10/20',7300,103);

在这里插入图片描述
1.找出销售部门中年纪最大的员工的姓名

SELECT name,dept_name,age from dept,emp WHERE dept1=dept2 AND dept_name='销售' and age=(SELECT max(age) from emp);

在这里插入图片描述

2.求财务部门最低工资的员工姓名

SELECT name,incoming from dept,emp WHERE dept1=dept2 AND dept_name='财务' AND incoming =(SELECT min(incoming) FROM emp );

在这里插入图片描述

3.列出每个部门收入总和高于9000的部门名称

select dept_name,SUM(incoming) from dept,emp WHERE dept1=dept2 GROUP BY dept_name HAVING sum(incoming)>9000;

在这里插入图片描述

4.求工资在7500到8500元之间,年龄最大的人的姓名及部门

SELECT name,dept_name,age,incoming from dept,emp where dept1=dept2 AND (incoming BETWEEN 7500 AND 8500) AND age =(SELECT max(age) from emp);

在这里插入图片描述

5.找出销售部门收入最低的员工入职时间

SELECT name,worktime_start,min(incoming) from dept,emp where dept1=dept2 and dept_name='销售';

在这里插入图片描述

6.财务部门收入超过2000元的员工姓名

select name,dept_name,incoming from emp,dept where dept1=dept2 and dept_name='财务' and incoming>2000;

在这里插入图片描述

7.列出每个部门的平均收入及部门名称

select dept_name,AVG(incoming) from dept,emp WHERE dept1=dept2 GROUP BY dept_name;

在这里插入图片描述

8.IT技术部入职员工的员工号

select sid,dept_name from emp,dept where dept1=dept2 AND dept_name='IT技术';

在这里插入图片描述

9.财务部门的收入总和;

SELECT dept_name,SUM(incoming) from emp,dept where dept1=dept2 and dept_name='财务';

在这里插入图片描述

10.先按部门号大小排序,再依据入职时间由早到晚排序员工信息表

select * from dept left JOIN emp ON dept1=dept2 ORDER BY dept1 DESC,worktime_start asc; 

在这里插入图片描述

11.找出哪个部门还没有员工入职;

select dept_name,name from dept LEFT JOIN emp on dept1=dept2 WHERE name is NULL; 

在这里插入图片描述

12.列出部门员工收入大于7000的部门编号,部门名称;

SELECT dept1,dept_name,incoming FROM emp,dept WHERE dept1=dept2 and incoming>7000;

在这里插入图片描述

13.列出每一个部门的员工总收入及部门名称;

SELECT dept_name,SUM(incoming) from dept,emp WHERE dept1=dept2 GROUP BY dept_name;

在这里插入图片描述

14.列出每一个部门中年纪最大的员工姓名,部门名称;

SELECT d.dept_name, e.name FROM dept d LEFT JOIN emp e ON d.dept1 = e.dept2 WHERE e.age = ( SELECT MAX(age) FROM emp e2 WHERE e2.dept2 = d.dept1 );

在这里插入图片描述

15.求李四的收入及部门名称

select name,incoming,dept_name from emp,dept WHERE dept1=dept2 and name='李四'; 

在这里插入图片描述

16.列出每个部门中收入最高的员工姓名,部门名称,收入,并按照收入降序

select e.name,d.dept_name,e.incoming from dept d left join emp e on d.dept1=e.dept2 where e.incoming=(select max(incoming) FROM emp e1 WHERE d.dept1=e1.dept2) ORDER BY e.incoming desc; 

在这里插入图片描述

17.列出部门员工数大于1个的部门名称

SELECT dept_name,count(*) from dept d INNER JOIN emp e on d.dept1=e.dept2 GROUP BY dept_name HAVING count(*)>1;

在这里插入图片描述

18.查找张三所在的部门名称

select name,dept_name from emp INNER JOIN dept where dept1=dept2 and name='张三';

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/HealerCCX/article/details/131632654