失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Mysql 多表查询和子查询

Mysql 多表查询和子查询

时间:2023-02-25 06:01:25

相关推荐

Mysql 多表查询和子查询

问题:

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.deptnoorder by d.deptno;

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

方法一:多表查询

select e2.*from emp e1,emp e2where 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.empnoinner join dept d on e.deptno=d.deptnowhere e.hiredate<m.hiredate;

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

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

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

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

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

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

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

select distinct m.*from emp e inner join emp m on e.mgr=m.empnowhere 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.dnamehaving count(e.empno)>=4;

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

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

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

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

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

select e.ename 雇员姓名,d.dname 部门名称,m.ename 领导姓名,s.grade 雇员工资等级from emp e inner join dept d on e.deptno=d.deptnoleft join emp m on e.mgr=m.empnoinner join salgrade s on e.sal between s.losal and s.hisalwhere 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.deptnowhere 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(m,0) income,d.dname 部门名称from emp e inner join dept d on e.deptno=d.deptnowhere e.sal+ifnull(m,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.deptnogroup by d.dname;

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

select e.ename 雇员姓名,d.dname 部门名称,e.sal 工资from dept d inner join emp e on d.deptno=e.deptnoorder 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.deptnogroup by d.dname,d.deptno,d.loc;

方法二:

select d.*,(select count(empno) from emp where deptno=d.deptno) countfrom 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.deptnowhere d.dname like '%s%'group by d.deptno;

如果觉得《Mysql 多表查询和子查询》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。