mysql多表查询30个经典案例

  • 插入两张表一个dept
  • 一个emp
  • 插入dept表数据
  • 插入emp表数据
  • 1.列出每个部门里面有那些员工及部门名称;
  • 2.运维部门的收入总和;
  • 3.HR部入职员工的员工号
  • 4.财务部门收入超过5000元的员工姓名
  • 5.找出销售部收入最低的员工的入职时间;
  • 6.找出年龄小于平均年龄的员工的姓名,ID和部门名称
  • 7.列出每个部门收入总和高于10000的部门名称
  • 8.查出财务部门工资少于10000元的员工姓名
  • 9.求财务部门最低工资的员工姓名;
  • 10.找出运维部门中年纪最大的员工的姓名
  • 11.求收入最低的员工姓名及所属部门名称:
  • 12.求雷蕾的收入及部门名称
  • 13.求员工收入小于8000元的员工部门编号名字及其部门名称;
  • 14.列出每个部门中收入最高的员工姓名,部门名称,收入,并按照收入降序;
  • 15.求出运维部门收益最高的俩位员工的姓名,工号,收益
  • 16.查询运维部低于平均收入的员工号与员工姓名:
  • 17.列出部门员工数大于1个的部门名称;
  • 18.列出部门员工收入不超过10000,且大于5000的员工年纪及部门编号;
  • 19.求入职于2022年的员工所属部门名称;
  • 20.查找haiwu所在的部门名称;
  • 21.列出每一个部门中年纪最小的员工姓名,部门名称;
  • 22.列出每一个部门的员工总收入及部门名称;
  • 23.列出部门员工收入大于6000的员工号,部门名称;
  • 24.找出哪个部门还没有员工入职;
  • 25.先按部门号大小排序,再依据入职时间由早到晚排序员工信息表 ;
  • 26.找出运维部门收入大于7500,显示他们的ID和姓名和年纪;
  • 27.找出入职于2022年以前的员工,且显示他们的姓名和入职时间,按照先后循序进行排序展示
  • 28.找出入职于2022年1月以后的员工,并显示年龄,姓名,收入
  • 29.查找收入大于8000元以上的人的姓名和收入
  • 30.统计各个部门的收入总和并按照从大到小方式排序进行显示


插入两张表一个dept

create table `dept`(
`dept1` VARCHAR(10),
`dept_name` VARCHAR(20)
)

一个emp

create table `emp`(
	`id` varchar(10),
	`name` VARCHAR(25),
	`age` VARCHAR(10),
	`worktime` VARCHAR(10),
	`dept2` varchar(10),
	`incoming` int(10)

)

插入dept表数据

mysql多表查询实验总结 mysql多表查询案例_mysql

插入emp表数据

insert into emp (id,name,age,worktime,incoming,dept2) VALUES (1500,'wangyi',25,'2022/2/1',8900,101),(1501,'hufei',27,'2022/3/1',7500,102),(1502,'heisen',30,'2022/3/20',8900,102),(1503,'huahudie',25,'2022/8/9',9000,102),(1504,'baimu',25,'2022/01/01',4000,103),(1505,'leilei',27,'2016/05/09',27800,106),(1506,'liuxiaoyi',28,'2017/05/09',16000,105),(1507,'haiwu',27,'2018/09/06',6300,104)

1.列出每个部门里面有那些员工及部门名称;

SELECT name,dept_name from dept left JOIN emp on dept.dept1 = emp.dept2

mysql多表查询实验总结 mysql多表查询案例_mysql_02

2.运维部门的收入总和;

SELECT sum(incoming),dept_name from emp RIGHT JOIN dept ON emp.dept2 = dept.dept1 where dept_name=‘yunwei’

mysql多表查询实验总结 mysql多表查询案例_sql_03

3.HR部入职员工的员工号

SELECT dept_name,id from emp RIGHT JOIN dept on emp.dept2 = dept.dept1 WHERE dept_name = ‘HR’

mysql多表查询实验总结 mysql多表查询案例_数据库_04

4.财务部门收入超过5000元的员工姓名

select name from dept LEFT JOIN emp on emp.dept2=dept.dept1 where dept_name=‘chaiwu’ and incoming>5000

mysql多表查询实验总结 mysql多表查询案例_数据库_05

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

select min(incoming),emp.worktime from dept RIGHT JOIN emp on dept.dept1 = emp.dept2 where dept_name=‘xiaoshou’ GROUP BY worktime

mysql多表查询实验总结 mysql多表查询案例_mysql多表查询实验总结_06

6.找出年龄小于平均年龄的员工的姓名,ID和部门名称

select name,id,dept_name from dept left JOIN emp on dept.dept1 = emp.dept2 WHERE age<(SELECT avg(age) from emp)

mysql多表查询实验总结 mysql多表查询案例_经验分享_07

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

SELECT dept_name from emp LEFT JOIN dept on emp.dept2 GROUP BY dept_name HAVING sum(incoming)>10000

mysql多表查询实验总结 mysql多表查询案例_mysql_08

8.查出财务部门工资少于10000元的员工姓名

SELECT name from emp LEFT JOIN dept on emp.dept2 = dept.dept1 WHERE incoming < ‘10000’ && dept.dept_name=‘chaiwu’

mysql多表查询实验总结 mysql多表查询案例_mysql_09

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

SELECT name,min(incoming) from emp LEFT JOIN dept on emp.dept2 = dept.dept1 where dept_name=‘chaiwu’ GROUP BY name

mysql多表查询实验总结 mysql多表查询案例_sql_10

10.找出运维部门中年纪最大的员工的姓名

SELECT emp.name from emp LEFT JOIN dept on emp.dept2 = dept.dept1 where age=(SELECT max(age) from emp LEFT JOIN dept on emp.dept2 = dept.dept1 WHERE dept.dept_name =‘yunwei’) and dept.dept_name=‘yunwei’

mysql多表查询实验总结 mysql多表查询案例_mysql多表查询实验总结_11

11.求收入最低的员工姓名及所属部门名称:

SELECT emp.name,dept.dept_name from emp LEFT JOIN dept on emp.dept2 = dept.dept1 where incoming=(SELECT min(incoming)from emp join dept on emp.dept2 = dept.dept1)

mysql多表查询实验总结 mysql多表查询案例_经验分享_12

12.求雷蕾的收入及部门名称

SELECT emp.incoming,dept.dept_name from emp LEFT JOIN dept on emp.dept2 = dept.dept1 where emp.name=‘leilei’

mysql多表查询实验总结 mysql多表查询案例_sql_13

13.求员工收入小于8000元的员工部门编号名字及其部门名称;

SELECT emp.id,dept.dept_name,name from emp LEFT JOIN dept on emp.dept2 = dept.dept1 where emp.incoming<8000

mysql多表查询实验总结 mysql多表查询案例_sql_14

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

SELECT any_value(name),max(incoming),any_value(dept_name) from dept LEFT JOIN emp on dept.dept1 = emp.dept2 GROUP BY dept_name

由于5.7mysql以上版本不对不需要group by进行去掉会报错,所以需要在不需要group by的名字前添加any_value(),()里面时你的字段

mysql多表查询实验总结 mysql多表查询案例_数据库_15

15.求出运维部门收益最高的俩位员工的姓名,工号,收益

select * from (select name,id,incoming from dept left join emp on dept.dept1=emp.dept2 where dept_name=‘yunwei’ order by incoming desc)as n where id limit 0,2;

mysql多表查询实验总结 mysql多表查询案例_mysql多表查询实验总结_16

16.查询运维部低于平均收入的员工号与员工姓名:

SELECT id,name from emp LEFT JOIN dept on emp.dept2 = dept.dept1 WHERE dept_name=‘yunwei’ and incoming<(

SELECT avg(incoming) from emp LEFT JOIN dept on dept.dept1 = emp.dept2)

mysql多表查询实验总结 mysql多表查询案例_数据库_17

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

SELECT DISTINCT(dept_name) from dept LEFT JOIN emp on dept.dept1=emp.dept2 where dept1 in(SELECT dept2 from dept LEFT JOIN emp on dept.dept1 = emp.dept2 GROUP BY dept2 HAVING(COUNT(dept2)>1))

mysql多表查询实验总结 mysql多表查询案例_mysql_18

18.列出部门员工收入不超过10000,且大于5000的员工年纪及部门编号;

SELECT age,id from dept LEFT JOIN emp on dept.dept1 = emp.dept2 where incoming<=7500 and incoming>=3000

mysql多表查询实验总结 mysql多表查询案例_数据库_19

19.求入职于2022年的员工所属部门名称;

SELECT DISTINCT(dept_name) from emp LEFT JOIN dept on emp.dept2 = dept.dept1 WHERE worktime=2022

mysql多表查询实验总结 mysql多表查询案例_数据库_20

20.查找haiwu所在的部门名称;

SELECT dept_name from emp LEFT JOIN dept on emp.dept2 = dept.dept1 WHERE name=‘haiwu’

mysql多表查询实验总结 mysql多表查询案例_sql_21

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

SELECT name,dept_name from dept LEFT JOIN emp on dept.dept1 = emp.dept2 where age in(SELECT min(age) from dept LEFT JOIN emp on dept.dept1 = emp.dept2 GROUP BY dept_name)

mysql多表查询实验总结 mysql多表查询案例_经验分享_22

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

SELECT sum(incoming),any_value(dept_name) from dept LEFT JOIN emp ON dept.dept1 = emp.dept2 GROUP BY dept1

mysql多表查询实验总结 mysql多表查询案例_经验分享_23

23.列出部门员工收入大于6000的员工号,部门名称;

SELECT id,dept_name from dept LEFT JOIN emp on dept.dept1=emp.dept2 where incoming >6000

mysql多表查询实验总结 mysql多表查询案例_数据库_24

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

SELECT any_value(dept_name) from dept LEFT JOIN emp on dept.dept1=emp.dept2 GROUP BY dept1 HAVING (COUNT(id)=0)

mysql多表查询实验总结 mysql多表查询案例_数据库_25

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

SELECT * FROM dept LEFT JOIN emp on dept.dept1=emp.dept2 ORDER BY dept1 desc,worktime DESC

mysql多表查询实验总结 mysql多表查询案例_mysql多表查询实验总结_26

26.找出运维部门收入大于7500,显示他们的ID和姓名和年纪;

SELECT id,name,age from dept LEFT JOIN emp on dept.dept1=emp.dept2 where dept_name=‘yunwei’ and incoming>=7500

mysql多表查询实验总结 mysql多表查询案例_经验分享_27

27.找出入职于2022年以前的员工,且显示他们的姓名和入职时间,按照先后循序进行排序展示

SELECT name,worktime from emp LEFT JOIN dept on emp.dept2 = dept.dept1 WHERE worktime>=2022 ORDER BY worktime

mysql多表查询实验总结 mysql多表查询案例_sql_28

28.找出入职于2022年1月以后的员工,并显示年龄,姓名,收入

SELECT name,age,incoming from emp LEFT JOIN dept on emp.dept2 = dept.dept1 where worktime>=2022/01/01

mysql多表查询实验总结 mysql多表查询案例_mysql多表查询实验总结_29

29.查找收入大于8000元以上的人的姓名和收入

SELECT name,incoming FROM emp where incoming>4000

mysql多表查询实验总结 mysql多表查询案例_数据库_30

30.统计各个部门的收入总和并按照从大到小方式排序进行显示

SELECT sum(incoming),any_value(dept_name) from emp LEFT JOIN dept on emp.dept2 = dept.dept1 GROUP BY dept_name ORDER BY any_value(incoming) desc

mysql多表查询实验总结 mysql多表查询案例_mysql_31