#取得每个部门最高薪水的人员名称select e.ENAME,t.* from EMP e JOIN(select DEPTNO,MAX(SAL) as maxsal from EMP GROUP BY DEPTNO) tON e.DEPTNO=t.DEPTNO and e.SAL = t.maxsal;select DEPTNO,AVG(SAL) from EMP GROUP BY DEPTNO;#哪些人的薪水在部门的平均薪水之上select e.ENAME,e.SAL from EMP e JOIN(select DEPTNO,AVG(SAL) as avgsal from EMP GROUP BY DEPTNO) tON e.DEPTNO=t.DEPTNO AND e.SAL > t.avgsal;#取得部门中(所有人的)平均的薪水等级select e.DEPTNO, avg(s.GRADE) from EMP eJOINSALGRADE sON e.SAL BETWEEN s.LOSAL and s.HISALGROUP BY e.DEPTNO#不准用组函数(Max),取得最高薪水。至少给出两种解决方案。#第一种以降序方式,limit 1select SAL as maxsal from EMP ORDER BY SAL desc limit 1#表的自连接select SAL as maxsal from EMP where SAL not in(select DISTINCT a.SAL from EMP a JOINEMP bon a.SAL < b.SAL)#取得平均薪水最高的部门的部门编号#第一种方案:降序取第一个。## 第一步:找出每个部门的平均薪水select DEPTNO,AVG(sal) as avgsal from EMP group by DEPTNO;## 第二步:降序选择第一个。select DEPTNO, AVG(SAL) as avgsal from EMP GROUP BY DEPTNO ORDER BY avgsal desc limit 1;## 第二种方案:maxselect max(t.avgsal) from (select DEPTNO ,avg(SAL) as avgsal from EMP GROUP BY DEPTNO ) t;select DEPTNO,avg(sal) as avgsal from EMP GROUP BY DEPTNO HAVING avgsal=(select max(t.avgsal) from (select DEPTNO ,avg(SAL) as avgsal from EMP GROUP BY DEPTNO ) t)#取得平均薪水最高的部门的部门名称select DNAME from DEPT as d JOIN(select DEPTNO,AVG(sal) as avgsal from EMP group by DEPTNO ORDER BY avgsal desc limit 1) tON d.DEPTNO=t.DEPTNO;#求平均薪水的等级最低的部门的部门名称#第一步:按照部门名称分组,找出每个部门的平均薪水。select avg(SAL) from EMP GROUP BY#9、取得薪水最高的前五名员工select ename,sal from EMP ORDER BY SAL DESC LIMIT 0, 5;#取得薪水最高的第六到第十名员工select ename,sal from EMP ORDER BY SAL DESC LIMIT 5,5;#11、取得最后入职的5名员工select ename,hiredate from EMP ORDER BY hiredate DESC LIMIT 5 ;#12、取得每个薪水等级有多少员工select s.GRADE,count(*) from EMP e join SALGRADE s on e.SAL between s.LOSAL and s.HISALGROUP BY s.GRADE#14、列出所有员工及领导的姓名select a.ENAME as '员工', b.ENAME as '领导'from EMP a left join EMP bon a.MGR=b.EMPNO;#15、列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称select e.EMPNO,e.ENAME,d.DNAMEfrom EMP ejoin EMP bon e.MGR = b.EMPNOjoin DEPT don e.DEPTNO =d.DEPTNOwhere e.HIREDATE < b.HIREDATE#16、列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门.select d.DNAME,e.*from EMP e right JOIN DEPT don e.DEPTNO=d.DEPTNO#17、列出至少有5个员工的所有部门select d.DNAME,count(*)from EMP eJOIN DEPT don e.DEPTNO = d.DEPTNOGROUP BY e.DEPTNOHAVING count(*)>=5#18、列出薪金比"SMITH"多的所有员工信息.select * from EMP where SAL > (select SAL from EMP where ENAME = 'SMITH')#19、列出所有"CLERK"(办事员)的姓名及其部门名称,部门的人数.#查询部门人手select DEPTNO, count(*) as deptcount from EMP GROUP BY DEPTNO;#列出所有"CLERK"(办事员)的姓名及其部门名称select e.ENAME,d.DNAME,d.DEPTNOfrom EMP eJOIN DEPT don e.DEPTNO = d.DEPTNOwhere e.JOB = 'CLERK';#组合查询select t1.*,t2.deptcountfrom (select e.ENAME,d.DNAME,d.DEPTNO from EMP e JOIN DEPT d on e.DEPTNO = d.DEPTNO where e.JOB = 'CLERK') t1JOIN (select DEPTNO, count(*) as deptcount from EMP GROUP BY DEPTNO) t2on t1.DEPTNO=t2.DEPTNO#20、列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数.select JOB,count(*) from EMP GROUP BY JOB HAVING MIN(sal) >1500#21、列出在部门"SALES"<销售部>工作的员工的姓名,假定不知道销售部的部门编号.select e.ENAMEfrom EMP eJOIN (select DEPTNO from DEPT where DNAME='SALES' ) ton e.DEPTNO= t.DEPTNO #22、列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,雇员的工资等级.#平均工资select avg(SAL) from EMP select e.ENAME as '姓名', d.DNAME as '部门名称', b.ENAME as '上级领导', s.GRADE as '工资等级'from EMP eJOIN DEPT don e.DEPTNO = d.DEPTNOleft JOIN EMP bon e.MGR = b.EMPNOJOIN SALGRADE son e.SAL BETWEEN s.LOSAL AND s.HISALwhere e.SAL >(select avg(SAL) from EMP);#23、列出与"SCOTT"从事相同工作的所有员工及部门名称.select EMP.ENAME,DEPT.DNAMEfrom EMP,DEPTWHERE JOB=(select JOB from EMP where ENAME = 'SCOTT') and ENAME != 'SCOTT' and EMP.DEPTNO = DEPT.DEPTNO#24、列出薪金等于部门30中员工的薪金的其他员工的姓名和薪金.select e.ENAME,e.SALfrom EMP ewhere e.SAL in (select DISTINCT SAL from EMP where DEPTNO=30) and e.DEPTNO <> 30;#25、列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金.部门名称.select DISTINCT SAL from EMP where DEPTNO=30;select e.ENAME,e.SAL,d.DNAMEfrom EMP eJOIN DEPT don e.DEPTNO = d.DEPTNOwhere e.SAL > (select max(SAL) from EMP where DEPTNO=30 ) and e.DEPTNO <> 30;#26、列出在每个部门工作的员工数量,平均工资和平均服务期限. #mysql当中怎么计算两个日期的“年差”,查了多少年?#TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)#间隔类型 second 秒 MINUTE 分钟 HOUR 小时 DAY 天 WEEK 星期 MONTH 月 QUARTER季度 YEAR 年select count(e.ENAME) as '员工数量', IFNULL(avg(e.SAL),0) as '平均工资', IFNULL(avg(TIMESTAMPDIFF(YEAR,e.HIREDATE,NOW())),0) as '平均服务期限'from EMP e right JOIN DEPT don e.DEPTNO = d.DEPTNOGROUP BY d.DEPTNO#27、列出所有员工的姓名、部门名称和工资。select e.ENAME,d.DNAME,e.SALfrom EMP e join DEPT don e.DEPTNO = d.DEPTNO;#28、列出所有部门的详细信息和人数select d.*,count(e.ENAME)from EMP eright JOIN DEPT don e.DEPTNO = d.DEPTNOGROUP BY DEPTNO#29、列出各种工作的最低工资及从事此工作的雇员姓名select ENAME, SALfrom EMPwhere sal in (select min(SAL)from EMPGROUP BY JOB)#30、列出各个部门的MANAGER(领导)的最低薪金select DISTINCT MGR from EMP GROUP BY MGR