• MySQL练习题


    进阶练习

    (插入emp数据)

    12.   用指令查询 第3页的 2条员工信息

    13.   查询工资高于1号部门平均工资的员工信息

    14.   查询最高工资的员工信息

    15.   查询工资高于2号部门最低工资的员工信息

    16.   给2号部门工资最低的员工涨500工资  

    17   查询每个 员工 姓名 工资 年总绩效(年总绩效3个月工资 别名显示)

    18   给有领导的员工且工资低于4000的工资 然涨薪300块的信息  

    19   给没有领导员工中工资最低的2个人工资涨50%    

    20  查询4号部门中超过本部门平均工资的员工信息

    21  查询2号部门中工资之和

    22  给平均工资最低的部门员工的工资每人降薪200块  (分组查询 虚拟表)

    数据

    1. -- 切换到shtd_store数据库
    2. USE shtd_store;
    3. -- 如果存在则删除员工表emp和部门表department
    4. DROP TABLE IF EXISTS emp;
    5. DROP TABLE IF EXISTS department;
    6. -- 建立部门表
    7. CREATE TABLE department (
    8. deptno INT PRIMARY KEY COMMENT '部门编号',
    9. dname VARCHAR(20) COMMENT '部门名称',
    10. loc VARCHAR(30) COMMENT '部门所在地'
    11. );
    12. -- 建立员工表
    13. CREATE TABLE emp (
    14. empno INT PRIMARY KEY COMMENT '员工编号',
    15. ename VARCHAR(20) COMMENT '员工姓名',
    16. job VARCHAR(30) COMMENT '职位',
    17. mgr INT COMMENT '上级经理编号',
    18. hiredate DATE COMMENT '入职日期',
    19. sal DECIMAL(10,2) COMMENT '基本工资',
    20. comm DECIMAL(10,2) COMMENT '奖金',
    21. deptno INT COMMENT '所属部门编号',
    22. FOREIGN KEY (deptno) REFERENCES department(deptno)
    23. );
    24. -- 插入部门数据
    25. INSERT INTO department (deptno, dname, loc) VALUES
    26. (1, '部门A', '地点A'),
    27. (2, '部门B', '地点B'),
    28. (3, '部门C', '地点C'),
    29. (4, '部门D', '地点D');
    30. -- 插入员工数据
    31. INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES
    32. (7369, '员工A', '职位A', 7902, '2022-01-01', 1000, NULL, 1),
    33. (7499, '员工B', '职位B', 7698, '2022-02-01', 1500, 300, 2),
    34. (7521, '员工C', '职位C', 7698, '2022-03-01', 2000, 500, 2),
    35. (7566, '员工D', '职位D', 7839, '2022-04-01', 3000, NULL, 1),
    36. (7698, '员工E', '职位E', 7839, '2022-05-01', 5000, NULL, 3),
    37. (7782, '员工F', '职位F', 7839, '2022-06-01', 4000, NULL, 2),
    38. (7788, '员工G', '职位G', 7566, '2022-07-01', 3500, NULL, 1),
    39. (7839, '员工H', '职位H', NULL, '2022-08-01', 8000, NULL, 4),
    40. (7844, '员工I', '职位I', 7698, '2022-09-01', 2500, NULL, 2),
    41. (7876, '员工J', '职位J', 7788, '2022-10-01', 4500, NULL, 1),
    42. (7900, '员工K', '职位K', 7698, '2022-11-01', 1800, NULL, 2),
    43. (7902, '员工L', '职位L', 7566, '2022-12-01', 3200, NULL, 1),
    44. (7934, '员工M', '职位M', 7782, '2023-01-01', 1500, NULL, 1);

    答案 

    1. -- 12. 查询第3页的2条员工信息
    2. SELECT *
    3. FROM emp
    4. ORDER BY empno
    5. LIMIT 2 OFFSET 4;
    6. /*
    7. 在查询第3页的2条员工信息时,根据常规的分页逻辑(每页显示2条记录),第三页的第二条员工信息是指 排在第5和第6行的员工记录。
    8. 上述查询使用LIMIT和OFFSET实现分页查询。
    9. LIMIT表示返回的结果行数,OFFSET表示跳过的行数。
    10. 这个查询返回第3页的2条员工信息。
    11. */
    12. -- 13. 查询工资高于1号部门平均工资的员工信息
    13. SELECT *
    14. FROM emp
    15. WHERE sal > (SELECT AVG(sal) FROM emp WHERE deptno = 1);
    16. /*
    17. 上述查询使用子查询来获取1号部门的平均工资,
    18. 并在外部查询中筛选出工资高于该平均工资的员工信息。
    19. */
    20. -- 14. 查询最高工资的员工信息
    21. SELECT *
    22. FROM emp
    23. WHERE sal = (SELECT MAX(sal) FROM emp);
    24. /*
    25. 上述查询使用子查询来获取最高工资,
    26. 并在外部查询中筛选出工资等于最高工资的员工信息。
    27. */
    28. -- 15. 查询工资高于2号部门最低工资的员工信息
    29. SELECT *
    30. FROM emp
    31. WHERE sal > (SELECT MIN(sal) FROM emp WHERE deptno = 2);
    32. /*
    33. 上述查询使用子查询来获取2号部门的最低工资,
    34. 并在外部查询中筛选出工资高于最低工资的员工信息。
    35. */
    36. -- 16. 给2号部门工资最低的员工涨500工资
    37. SELECT empno,sal from emp where deptno = "2" order by sal limit 1;
    38. UPDATE emp
    39. set sal = sal + 1000
    40. WHERE
    41. empno = 7499;
    42. SELECT * from emp where empno = "7499";
    43. ------------------------------------
    44. UPDATE emp
    45. SET sal = sal + 500
    46. WHERE empno = (
    47. SELECT empno
    48. FROM emp
    49. WHERE deptno = 2
    50. ORDER BY sal
    51. LIMIT 1
    52. );
    53. /*
    54. 上述更新操作使用子查询来获取2号部门工资最低的员工,
    55. 并将其工资增加500。
    56. */
    57. -- 17. 查询每个员工的姓名、工资、年总绩效(年总绩效=3个月工资,别名显示)
    58. SELECT ename, sal, sal * 3 AS total_performance
    59. FROM emp;
    60. /*
    61. 上述查询使用别名和计算列来获取每个员工的姓名、工资以及年总绩效。
    62. 年总绩效等于工资乘以3。
    63. */
    64. -- 18. 给有领导且工资低于4000的员工涨薪300元
    65. UPDATE emp
    66. SET sal = sal + 300
    67. WHERE mgr IS NOT NULL AND sal < 4000;
    68. /*
    69. 上述更新操作筛选出有领导且工资低于4000的员工,
    70. 并将其工资增加300。
    71. */
    72. -- 19. 给没有领导且工资最低的2个人工资涨50%
    73. UPDATE emp
    74. SET sal = sal * 1.5
    75. WHERE mgr IS NULL
    76. ORDER BY sal
    77. LIMIT 2;
    78. /*
    79. 上述更新操作使用排序和LIMIT来找到没有领导且工资最低的2个员工,
    80. 并将他们的工资增加50%。
    81. */
    82. -- 20. 查询4号部门中超过本部门平均工资的员工信息
    83. SELECT *
    84. FROM emp
    85. WHERE deptno = 4 AND sal > (SELECT AVG(sal) FROM emp WHERE deptno = 4);
    86. /*
    87. 上述查询使用子查询来获取4号部门的平均工资,
    88. 并在外部查询中筛选出工资高于该平均工资的员工信息。
    89. */
    90. -- 21. 查询2号部门中工资之和
    91. SELECT SUM(sal)
    92. FROM emp
    93. WHERE deptno = 2;
    94. /*
    95. 上述查询使用SUM函数计算2号部门的工资总和。
    96. */
    97. -- 22. 给平均工资最低的部门员工的工资每人降薪200元 (分组查询,虚拟表)
    98. UPDATE emp
    99. SET sal = sal - 200
    100. WHERE deptno = (
    101. SELECT deptno
    102. FROM (
    103. SELECT deptno, AVG(sal) AS avg_sal
    104. FROM emp
    105. GROUP BY deptno
    106. ORDER BY avg_sal
    107. LIMIT 1
    108. ) AS min_dept
    109. );
    110. /*
    111. 上述更新操作使用子查询和虚拟表来找到平均工资最低的部门,
    112. 并对该部门的员工每人进行工资降低200元。
    113. */

  • 相关阅读:
    【Python】用Python生成图像特效
    分布式链路追踪(一)SkyWalking(1)介绍与安装
    我做的FFmpeg开源C#封装库Sdcb.FFmpeg
    8月更新 | Visual Studio Code Python
    netty系列之:让TCP连接快一点,再快一点
    OFD文件WEB前端展示-easyofd(1.0.6)
    Vue监测数据的原理(对象、数组)、Vue.set()、vm.$set()
    pygame绘制梯形 使用polygon函数
    软件定义汽车产业生态创新白皮书
    【机器学习算法】聚类算法-3 K均值聚类法,PAM法,神经网络聚类法SOM
  • 原文地址:https://blog.csdn.net/W2484980893/article/details/134275513