问题:

1. 查询所有员工的姓名、部门名称和工资
2. 查询薪金比"allen"高的所有员工
3. 查询所有员工的姓名以及其直接上级的姓名
4. 查询受雇日期早于其直接上级的所有员工的编号、姓名、部门名称
5. 查询部门名称和这些部门的员工信息,要求查询出那些没有员工的部门
6. 查询在部门"sales"(销售部)工作的员工的姓名,假定不知道销售部的部门编号
7. 查询所有员工的年资,按年薪从低到高排序
8. 查询雇员的领导信息,要求领导的薪水要超过3000
9. 查询至少有4个员工的部门名称
10. 查询所有从事"clerk"工作的雇员姓名及其部门名称、部门人数
11. 查询最低薪金大于1500的各种工作及从事此工作的全部雇员人数
12. 查询薪金高于公司平均薪金的雇员姓名、所在部门名称、领导姓名、雇员的工资等级
13.查询与"smith"从事相同工作的所有员工及部门名称
14.查询薪金等于部门30中员工的薪金的所有员工的姓名和薪金 
15.查询薪金高于部门30所有员工薪金的员工姓名、薪金及部门名称
16.查询在每个部门工作的员工数量、平均工资 
17.查询所有员工的姓名、部门名称和工资
18.查询所有部门的详细信息和部门人数
19.查询每种工作的最低工资以及从事此工作的雇员姓名
20.查询各个部门的经理的最低薪金
21.求出部门名称中,带's'字符的部门员工的工资总和 、部门人数

解答:

1. 查询所有员工的姓名、部门名称和工资

select e.ename 雇员姓名,d.dname 部门名称,e.sal 雇员工资
from emp e inner join dept d on e.deptno=d.deptno
order by d.deptno; 

2. 查询薪金比"allen"高的所有员工

方法一:多表查询

select e2.*
from emp e1,emp e2
where e1.ename='allen' and e2.sal>e1.sal;

方法二:子查询

select * from emp where sal>(
	select sal from emp where ename='allen'
);

3. 查询所有员工的姓名以及其直接上级的姓名

select e.ename 员工姓名,m.ename 上级姓名
from emp e left join emp m on e.mgr=m.empno;

4. 查询受雇日期早于其直接上级的所有员工的编号、姓名、部门名称

select e.empno 雇员编号,e.ename 雇员姓名,d.dname 部门名称
from emp e left join emp m on e.mgr=m.empno
		inner join dept d on e.deptno=d.deptno
where e.hiredate<m.hiredate;

5. 查询部门名称和这些部门的员工信息,要求查询出那些没有员工的部门

select d.dname 部门名称,e.*
from dept d left join emp e on d.deptno=e.deptno
order by d.dname asc;

6. 查询在部门"sales"(销售部)工作的员工的姓名,假定不知道销售部的部门编号

select e.ename 雇员姓名,d.dname 部门名称
from emp e,dept d
where e.deptno=d.deptno and d.dname='sales';

7. 查询所有员工的年资,按年薪从低到高排序

select ename 雇员姓名,(sal+ifnull(comm,0))*12 income
from emp 
order by income asc;

8. 查询雇员的领导信息,要求领导的薪水要超过3000

select distinct m.*
from emp e inner join emp m on e.mgr=m.empno
where m.sal>3000;

9. 查询至少有4个员工的部门名称

select d.dname 部门名称,count(e.empno) 雇员人数
from emp e inner join dept d on e.deptno=d.deptno 
group by d.dname
having count(e.empno)>=4;

10. 查询所有从事"clerk"工作的雇员姓名及其部门名称、部门人数

select e.ename 雇员姓名,d.dname 部门名称,(
	select count(empno) 
	from emp
	where deptno=d.deptno) 部门人数
from emp e inner  join dept d on e.deptno=d.deptno
where  e.job='clerk';

11. 查询最低薪金大于1500的各种工作及从事此工作的全部雇员人数

select job 职位,count(empno) 雇员人数 
from emp 
group by job
having min(sal)>1500;

12. 查询薪金高于公司平均薪金的雇员姓名、所在部门名称、领导姓名、雇员的工资等级

select e.ename 雇员姓名,d.dname 部门名称,m.ename 领导姓名,s.grade 雇员工资等级
from emp e inner join dept d on e.deptno=d.deptno
		left join emp m on e.mgr=m.empno
		inner join salgrade s on e.sal between s.losal and s.hisal
where e.sal>(select avg(sal) from emp);

13.查询与"smith"从事相同工作的所有员工及部门名称

select e.ename 雇员姓名,d.dname 部门名称
from emp e left join dept d on e.deptno=d.deptno
where job=(select job from emp where ename='smith') and e.ename!='smith';

14.查询薪金等于部门30中员工的薪金的所有员工的姓名和薪金 

select ename 雇员姓名,sal+ifnull(comm,0) income 
from emp 
where 'income' in (select sal+ifnull(comm,0) income from emp where deptno=30) and deptno!=30;

15.查询薪金高于部门30所有员工薪金的员工姓名、薪金及部门名称

select e.ename 雇员姓名,e.sal+ifnull(e.comm,0) income,d.dname 部门名称
from emp e inner join dept d on e.deptno=d.deptno
where e.sal+ifnull(e.comm,0)>all (select sal+ifnull(comm,0) income from emp where deptno=30);

16.查询在每个部门工作的员工数量、平均工资 

select d.dname,count(e.empno),ifnull(avg(e.sal),0)
from dept d left join emp e on d.deptno=e.deptno
group by d.dname;

17.查询所有员工的姓名、部门名称和工资

select e.ename 雇员姓名,d.dname 部门名称,e.sal 工资
from dept d inner join emp e on d.deptno=e.deptno
order by d.dname ;

18.查询所有部门的详细信息和部门人数

方法一:

select d.dname,d.deptno,d.loc,count(e.empno)
from dept d left join emp e on d.deptno=e.deptno
group by d.dname,d.deptno,d.loc;

方法二:

select d.*,(select count(empno) from emp where deptno=d.deptno) count
from dept d;

19.查询每种工作的最低工资以及从事此工作的雇员姓名

select  s.job 职位,e.ename 雇员姓名, s.min 最低工资 
from emp e,(select job,min(sal) min from emp group by job) s 
where e.sal =s.min and e.job=s.job;

20.查询各个部门的经理的最低薪金

select deptno 部门编号,min(sal) 最低工资 from emp where job='manager' group by deptno;

21.求出部门名称中,带's'字符的部门员工的工资总和 、部门人数

select d.deptno 部门编号,ifnull(sum(e.sal),0) 工资总和,count(e.empno) 部门人数
from dept d left join emp e on d.deptno=e.deptno
where d.dname like '%s%'
group by d.deptno;

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐