经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MySQL » 查看文章
Mysql练习
来源:cnblogs  作者:杰的博客#  时间:2021/5/6 17:51:24  对本文有异议

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.求每个部门最高薪水的人员名称

解决思路:1 先求每个部门最高的薪水

  1. SELECT
  2. e.deptno,MAX(e.sal) as maxsal
  3. from
  4. emp e
  5. GROUP BY
  6. e.deptno;

在这里插入图片描述
2. 将第一步得出来的结果,当成临时表

  1. SELECT
  2. e.deptno,ename,t.maxsal,e.sal
  3. from
  4. (SELECT
  5. e.deptno,max(e.sal) as maxsal
  6. from
  7. emp e
  8. GROUP BY
  9. e.deptno) t
  10. JOIN
  11. emp e
  12. on
  13. t.deptno = e.deptno
  14. WHERE
  15. t.maxsal = e.sal
  16. ORDER BY --做一个排序
  17. e.deptno;

在这里插入图片描述

  1. 哪些人的薪水在部门平均薪水之上
  1. 求出每个部门的平均薪水
  1. SELECT
  2. e.deptno,avg(e.sal) as avgsal
  3. from
  4. emp e
  5. GROUP BY
  6. e.deptno;

在这里插入图片描述
2. 查看哪些人的薪水大于平均水平

  1. SELECT
  2. e.deptno,e.ename,e.sal
  3. from
  4. (SELECT
  5. e.deptno,avg(e.sal) as avgsal
  6. from
  7. emp e
  8. GROUP BY
  9. e.deptno) t
  10. JOIN
  11. emp e
  12. ON
  13. e.deptno = t.deptno
  14. WHERE
  15. t.avgsal < e.sal

在这里插入图片描述

3.取得部门中(所有人的)平均薪水等级

  1. 取得部门中所有人的平均薪水的等级
  1. SELECT
  2. e.deptno,avg(e.sal) as avgsal
  3. from
  4. emp e
  5. GROUP BY
  6. e.deptno;
  1. 取得部门中所有人的平均的薪水等级
  1. SELECT
  2. t.deptno,t.avgsal,s.grade
  3. from
  4. ( SELECT
  5. e.deptno,avg(e.sal) as avgsal
  6. from
  7. emp e
  8. GROUP BY
  9. e.deptno) t
  10. JOIN
  11. salgrade s
  12. on
  13. t.avgsal BETWEEN s.losal and hisal

在这里插入图片描述

  1. 取得部门中所有人的平均的薪水等级
  1. 求出每个人的薪水等级
  1. SELECT
  2. e.deptno,e.ename,s.grade
  3. FROM
  4. emp e
  5. join
  6. salgrade s
  7. on
  8. e.sal BETWEEN s.losal and s.hisal;

在这里插入图片描述
2. 在临时表求平均的

  1. SELECT
  2. t.deptno,t.ename,AVG(t.grade) as avggrade
  3. FROM
  4. (SELECT
  5. e.deptno,e.ename,s.grade
  6. FROM
  7. emp e
  8. join
  9. salgrade s
  10. on
  11. e.sal BETWEEN s.losal and s.hisal) t
  12. GROUP BY
  13. t.deptno

在这里插入图片描述

  1. 不用组函数(MAX),求取最高薪水(俩种方案)
  1. 用倒叙,找第一行
  1. SELECT e.sal from emp e ORDER BY e.sal desc LIMIT 1
  1. 建俩张表,交叉进行比较去掉最大的,在找出不在俩表生成的表中数,就是最大的数
  1. SELECT a.sal FROM emp a WHERE a.sal not in (SELECT
  2. a.sal
  3. from
  4. emp a
  5. join
  6. emp b
  7. on
  8. a.sal < b.sal);

在这里插入图片描述

  1. 求取平均薪水最高的部门的部门编号
  1. 求部门平均水平
  1. SELECT
  2. e.deptno,avg(e.sal) as avgsal
  3. FROM
  4. emp e
  5. GROUP BY
  6. e.deptno

在这里插入图片描述
2. 求出平均水平最大值,再进行筛选

  1. SELECT
  2. t.deptno
  3. FROM
  4. ( SELECT
  5. e.deptno,avg(e.sal) as avgsal
  6. FROM
  7. emp e
  8. GROUP BY
  9. e.deptno)t
  10. HAVING
  11. MAX(avgsal)

在这里插入图片描述

7 . 求取平均薪水最高部门的部门名称

  1. SELECT
  2. d.dname
  3. FROM
  4. ( SELECT
  5. e.deptno,avg(e.sal) as avgsal
  6. FROM
  7. emp e
  8. GROUP BY
  9. e.deptno)t
  10. JOIN
  11. dept d
  12. ON
  13. t.deptno = d.deptno
  14. HAVING
  15. MAX(avgsal)

8.求平均薪水的等级最低的部门名称

  1. 部门的平均薪水
  1. SELECT
  2. e.deptno,avg(e.sal) AS avgsal
  3. FROM
  4. emp e
  5. group by
  6. e.deptno
  1. 在一的基础上求最低的部门薪资等级
  1. SELECT
  2. MIN(s.grade)
  3. from
  4. (SELECT
  5. e.deptno,avg(e.sal) AS avgsal
  6. FROM
  7. emp e
  8. group by
  9. e.deptno) t
  10. join
  11. salgrade s
  12. on
  13. t.avgsal between s.losal and s.hisal

在这里插入图片描述
3.连表就行求部门名称

  1. SELECT
  2. t.deptno,t.dname,s.grade
  3. FROM
  4. (SELECT
  5. e.deptno,d.dname,avg(e.sal) as avgsal
  6. FROM
  7. emp e
  8. JOIN
  9. dept d
  10. on
  11. e.deptno = d.deptno
  12. GROUP BY
  13. e.deptno,d.dname)t
  14. JOIN
  15. salgrade s
  16. on
  17. t.avgsal BETWEEN s.losal and s.hisal
  18. WHERE
  19. s.grade = (SELECT
  20. MIN(s.grade)
  21. from
  22. (SELECT
  23. e.deptno,avg(e.sal) AS avgsal
  24. FROM
  25. emp e
  26. group by
  27. e.deptno) t
  28. join
  29. salgrade s
  30. on
  31. t.avgsal between s.losal and s.hisal )
  1. 求比普通员工的最高薪水高的经理名字
  1. 找出mgr的人有哪些
  1. SELECT
  2. DISTINCT --去重
  3. mgr
  4. FROM
  5. emp
  1. 找出最高薪水员工
  1. SELECT
  2. max(sal) as maxsal
  3. FROM
  4. emp
  5. WHERE
  6. empno not in (SELECT
  7. DISTINCT
  8. mgr
  9. FROM
  10. emp
  11. WHERE mgr is not null)

注 in 会自动忽略空值,not in不会自动忽略

  1. SELECT ename from emp WHERE sal > (SELECT
  2. max(sal) as maxsal
  3. FROM
  4. emp
  5. WHERE
  6. empno not in (SELECT
  7. DISTINCT
  8. mgr
  9. FROM
  10. emp
  11. WHERE mgr is not null)
  12. )

在这里插入图片描述

10 取薪水最高的前五名员工

  1. SELECT * from emp
  2. ORDER BY
  3. sal desc
  4. LIMIT
  5. 0,5;

11 取得薪水最高的第六到第十名员工

  1. SELECT * from emp ORDER BY sal desc limit 5,5

12 取得最后入职的5名员工

  1. SELECT * from emp order by hiredate desc limit 0,5

13求每个等级有多少员工

1.查询每个员工的薪水等级

  1. SELECT
  2. e.ename,s.grade
  3. FROM
  4. emp e
  5. JOIN
  6. salgrade s
  7. on
  8. e.sal BETWEEN s.losal and s.hisal
  9. ORDER BY
  10. s.grade
  1. 将每个等级的员工计数
  1. SELECT
  2. t.grade ,COUNT(t.ename) as countEmp
  3. FROM
  4. (SELECT
  5. e.ename,s.grade
  6. FROM
  7. emp e
  8. JOIN
  9. salgrade s
  10. on
  11. e.sal BETWEEN s.losal and s.hisal
  12. ORDER BY
  13. s.grade) t
  14. GROUP BY
  15. t.grade

原文链接:http://www.cnblogs.com/llsj/p/14706011.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号