MySQL多表查询习题
数据内容介绍
数据库中有两个表
内容如下:
习题
- 列出所有员工的姓名及其直接上级的姓名。
- 列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。
- 列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
- 列出在财务部工作的员工的姓名,假定不知道财务部的部门编号。
- 列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导。
- 列出与陈超从事相同工作的所有员工及部门名称。
- 查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。
- 列出薪金高于在财务部工作员工平均薪金的员工姓名和薪金、部门名称。
答案
# 第一题,列出所有员工的姓名及其直接上级的姓名。
select e.name,m.name 上级 from employee e join employee m on e.leader_NO = m.number;
# 第二题,列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称
select e.number,e.name,d.name from employee e ,department d where d.number = (select e.department_NO from employee e join employee m on e.leader_NO = m.number and e.hire_date < m.hire_date) and e.number = (select e.number from employee e join employee m on e.leader_NO = m.number and e.hire_date < m.hire_date);
第三题,列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
select employee.*, department.name from employee join department on employee.department_NO = department.number;
# 第四题,列出在财务部工作的员工的姓名,假定不知道财务部的部门编号。
select name from employee where employee.department_NO in (select number from department where department.name = "财务部");
# 第五题,列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导
select employee.*, department.name from employee join department on employee.department_NO = department.number and employee.job = (select job from employee where name = "陈超");