目录

一,财务管理系统-数据库模块

1,任务概述

2,参考代码

2.1 数据准备

2.2 参考SQL语句

1. 修改表结构,在部门表中添加部门简介字段

2. 将李四的职称改为“工程师”,并将她的基本工资改成 2000,职务工资 为 700

3. 删除人事部门的部门记录

4. 查询出每个雇员的雇员编号,实发工资,应发工资

5. 查询姓张且年龄小于 40 的员工记录

6. 查询雇员的雇员编号,姓名,职称,部门名称,实发工资

7. 查询销售部门的雇员姓名,工资

8. 统计各职称的人数

9. 统计各部门的部门名称,实发工资总和,平均工资

10. 查询比销售部门所有员工基本工资都高的雇员姓名


一,财务管理系统-数据库模块

1,任务概述

程序员冯帅前脚更把学生系统理顺,组长看他 sql 写的不错,于是给他安 排跟着一个新项目,项目是为公司的财务部门进行财务管理的。下面是项目所 需的数据表和功能需求

数据表:

  • 雇员表(employee):雇员编号(empid,主键),姓名(name),性别(sex), 职称(title),出生日期(birthday),所属部门(depid)
  • 部门(department):部门编号(depid,主键),部门名称(depname)
  • 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工 资(titlesalary),扣除(deduction)

需求:

  • 1. 修改表结构,在部门表中添加部门简介字段
  • 2. 将李四的职称改为“工程师”,并将她的基本工资改成 2000,职务工资 为 700
  • 3. 删除人事部门的部门记录
  • 4. 查询出每个雇员的雇员编号,实发工资,应发工资
  • 5. 查询姓张且年龄小于 40 的员工记录
  • 6. 查询雇员的雇员编号,姓名,职称,部门名称,实发工资
  • 7. 查询销售部门的雇员姓名,工资
  • 8. 统计各职称的人数
  • 9. 统计各部门的部门名称,实发工资总和,平均工资
  • 10. 查询比销售部门所有员工基本工资都高的雇员姓名

2,参考代码

2.1 数据准备

雇员表(employee)

/*Navicat Premium Data TransferSource Server         : localhost_3306Source Server Type    : MySQLSource Server Version : 50731Source Host           : localhost:3306Source Schema         : demoTarget Server Type    : MySQLTarget Server Version : 50731File Encoding         : 65001Date: 20/03/2021 21:34:24
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for employee
-- ----------------------------
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee`  (`empid` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,`name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`sex` varchar(4) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`title` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`birthday` datetime(0) NULL DEFAULT NULL,`depid` int(11) NULL DEFAULT NULL,PRIMARY KEY (`empid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 17 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of employee
-- ----------------------------
INSERT INTO `employee` VALUES (1, '唐三', '男', '董事长', '2000-01-01 21:10:26', 6);
INSERT INTO `employee` VALUES (2, '小舞', '女', '副董事长', '1900-01-01 21:11:22', 6);
INSERT INTO `employee` VALUES (3, '戴沐白', '男', '人事部长', '1999-06-06 21:15:21', 1);
INSERT INTO `employee` VALUES (4, '朱竹清', '女', '人事副部长', '2004-08-20 21:16:11', 1);
INSERT INTO `employee` VALUES (5, '奥斯卡', '男', '销售部长', '1999-01-02 21:16:58', 2);
INSERT INTO `employee` VALUES (6, '宁荣荣', '女', '销售主管', '2001-03-20 21:17:36', 2);
INSERT INTO `employee` VALUES (7, '牛皋', '男', '后勤副部长', '1990-01-01 21:18:30', 3);
INSERT INTO `employee` VALUES (8, '泰坦', '男', '后勤部长', '1990-06-06 21:18:57', 3);
INSERT INTO `employee` VALUES (9, '白鹤', '男', '业务部长', '1990-03-09 21:19:56', 4);
INSERT INTO `employee` VALUES (10, '杨无敌', '男', '业务副部长', '1990-08-15 21:20:25', 4);
INSERT INTO `employee` VALUES (11, '比比东', '女', '财务部长', '1995-06-06 21:21:49', 5);
INSERT INTO `employee` VALUES (12, '玉小刚', '男', '财务副部长', '1995-08-08 21:22:32', 5);
INSERT INTO `employee` VALUES (13, '李四', '男', '销售员', '2000-12-01 21:23:19', 2);
INSERT INTO `employee` VALUES (14, '张三', '男', '销售员', '2003-01-30 21:24:25', 2);
INSERT INTO `employee` VALUES (15, '张伟', '男', '副董事长', '1970-01-01 21:25:52', 6);
INSERT INTO `employee` VALUES (16, '张大炮', '男', '工程师', '1999-11-11 21:27:08', 1);SET FOREIGN_KEY_CHECKS = 1;

部门(department)

/*Navicat Premium Data TransferSource Server         : localhost_3306Source Server Type    : MySQLSource Server Version : 50731Source Host           : localhost:3306Source Schema         : demoTarget Server Type    : MySQLTarget Server Version : 50731File Encoding         : 65001Date: 20/03/2021 21:34:13
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for department
-- ----------------------------
DROP TABLE IF EXISTS `department`;
CREATE TABLE `department`  (`depid` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,`depname` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,PRIMARY KEY (`depid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of department
-- ----------------------------
INSERT INTO `department` VALUES (1, '人事部门');
INSERT INTO `department` VALUES (2, '销售部门');
INSERT INTO `department` VALUES (3, '后勤部门');
INSERT INTO `department` VALUES (4, '业务部门');
INSERT INTO `department` VALUES (5, '财务部门');
INSERT INTO `department` VALUES (6, '管理部门');SET FOREIGN_KEY_CHECKS = 1;

工资表(salary)

/*Navicat Premium Data TransferSource Server         : localhost_3306Source Server Type    : MySQLSource Server Version : 50731Source Host           : localhost:3306Source Schema         : demoTarget Server Type    : MySQLTarget Server Version : 50731File Encoding         : 65001Date: 20/03/2021 21:34:31
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for salary
-- ----------------------------
DROP TABLE IF EXISTS `salary`;
CREATE TABLE `salary`  (`empid` int(11) NULL DEFAULT NULL,`basesalary` decimal(10, 2) NULL DEFAULT NULL,`titlesalary` decimal(10, 2) NULL DEFAULT NULL,`deduction` decimal(10, 2) NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of salary
-- ----------------------------
INSERT INTO `salary` VALUES (1, 10000.00, 10000.00, 0.00);
INSERT INTO `salary` VALUES (2, 10000.00, 9000.00, 0.00);
INSERT INTO `salary` VALUES (3, 9000.00, 5000.00, 5.00);
INSERT INTO `salary` VALUES (4, 9000.00, 4500.00, 0.00);
INSERT INTO `salary` VALUES (5, 8000.00, 5000.00, 16.00);
INSERT INTO `salary` VALUES (6, 8000.00, 4500.00, 0.00);
INSERT INTO `salary` VALUES (7, 8000.00, 4500.00, 0.00);
INSERT INTO `salary` VALUES (8, 8000.00, 5000.00, 100.00);
INSERT INTO `salary` VALUES (9, 8000.00, 5000.00, 0.00);
INSERT INTO `salary` VALUES (10, 8000.00, 4500.00, 25.00);
INSERT INTO `salary` VALUES (11, 8000.00, 5000.00, 0.00);
INSERT INTO `salary` VALUES (12, 8000.00, 5000.00, 0.00);
INSERT INTO `salary` VALUES (13, 5000.00, 3000.00, 25.00);
INSERT INTO `salary` VALUES (14, 5000.00, 2500.00, 0.00);
INSERT INTO `salary` VALUES (15, 10000.00, 9500.00, 0.00);
INSERT INTO `salary` VALUES (16, 7000.00, 4000.00, 100.00);SET FOREIGN_KEY_CHECKS = 1;

2.2 参考SQL语句

1. 修改表结构,在部门表中添加部门简介字段

alter table department add introduction varchar(100);


2. 将李四的职称改为“工程师”,并将她的基本工资改成 2000,职务工资 为 700

update employee set title='工程师' where name="李四";
update salary set basesalary=2000,titlesalary=700 where empid = (select empid from employee where name="李四");


3. 删除人事部门的部门记录

(个人理解是删除这个部门以及这个部门中所有人的信息,包括薪资表、雇员表、部门表中的记录)

delete from salary where empid in (select empid from employee where depid = (select depid from department where depname="人事部门")
);

delete from employee where depid = (select depid from department where depname="人事部门"
);

delete from department where depname = "人事部门";


4. 查询出每个雇员的雇员编号,实发工资,应发工资

(个人理解:实发工资=basesalary + titlesalary - deduction,应发工资=basesalary + titlesalary)

select a.empid as '雇员编号',
(a.basesalary+a.titlesalary-a.deduction) as '实发工资',
(a.basesalary+a.titlesalary) as '应发工资'
from salary as a;


5. 查询姓张且年龄小于 40 的员工记录

(个人理解:查询三张表中所有关于符合条件员工的记录)

先选出满足条件的部分记录

select * from employee where name like '张%' and
year(curdate())-year(birthday)>40;

联结其他表,获得所有信息

select employee.*,salary.basesalary,salary.titlesalary,salary.deduction,department.depname,department.introduction from employee
join salary on salary.empid = employee.empid
join department on department.depid = employee.depid
where employee.name like '张%' and year(curdate())-year(employee.birthday)>40;


6. 查询雇员的雇员编号,姓名,职称,部门名称,实发工资

select employee.empid,employee.name,employee.title,department.depname,(salary.basesalary+salary.titlesalary-salary.deduction) as '实发工资'
from employee
join department on employee.depid=department.depid
join salary on employee.empid=salary.empid
order by employee.empid;


7. 查询销售部门的雇员姓名,工资

select employee.name,employee.title,salary.basesalary,salary.titlesalary,salary.deduction from employee
join salary on employee.empid=salary.empid
where employee.depid in (select depid from department where depname='销售部门');


8. 统计各职称的人数

select title,count(*) from  employee group by title;


9. 统计各部门的部门名称,实发工资总和,平均工资

这个查询比较复杂,可以一步步进行拆分。细节可以参考这篇博客第17题的实现方法,传送门<( ̄︶ ̄)↗[GO!]@&再见萤火虫&【05-数据库_数据库高级_SQL进阶练习(部分习题)】【第17题】

1,通过查询,获得新表:包含员工id、实际工资、所属部门名称

select newsalary.*,department.depname
from(select salary.empid,(salary.basesalary+salary.titlesalary-salary.deduction) as actualsalary from salary
) as newsalary
join employee on newsalary.empid=employee.empid
join department on employee.depid=department.depid;

2,在查询的结果之上,使用聚集函数,并以depname进行分组即可

select temp.depname,sum(actualsalary) as '工资总和',avg(actualsalary) as '平均工资'
from (select newsalary.*,department.depnamefrom(select salary.empid,(salary.basesalary+salary.titlesalary-salary.deduction) as actualsalary from salary) as newsalaryjoin employee on newsalary.empid=employee.empidjoin department on employee.depid=department.depid
) as temp
group by temp.depname;


10. 查询比销售部门所有员工基本工资都高的雇员姓名

1,得到销售部门最高基本工资

select max(salary.basesalary) from salary where salary.empid in (select employee.empid from employeeleft join department on employee.depid=department.depidwhere department.depname='销售部门'
)

2,比销售部门所有员工基本工资都高的雇员id

select salary.empid from salary where salary.basesalary>(select max(salary.basesalary) from salary where salary.empid in (select employee.empid from employeeleft join department on employee.depid=department.depidwhere department.depname='销售部门')
);

3,雇员id与雇员表联结,获得雇员姓名

select employee.name from (select salary.empid from salary where salary.basesalary>(select max(salary.basesalary) from salary where salary.empid in (select employee.empid from employeeleft join department on employee.depid=department.depidwhere department.depname='销售部门'))
)as temp
left join employee
on employee.empid=temp.empid;


章节汇总在这里(づ ̄3 ̄)づ╭❤~@&再见萤火虫&【05-数据库】


对学习Java感兴趣的同学欢迎加入QQ学习交流群:1126298731

有问题欢迎提问,大家一起在学习Java的路上打怪升级!(o゜▽゜)o☆[BINGO!]

任务卡_05-数据库_-MySql 高级任务相关推荐

  1. c access mysql数据库_基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo)...

    基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo) 一.三种数据库的主要对比 数据库类型 特点 Microsoft Access 桌面数据库.数据库载体是单个文件 ...

  2. 一天学会MYSQL数据库_笔记

    视频是b站的: 一天学会MYSQL数据库 说是说一天,但我看了三四天,有点基础可能看的更加快.我直接从notepad中把自己做的笔记粘过来了~ 第一章 mysql建表约束 --mysql 学习笔记-- ...

  3. 一台主机装两个mysql数据库_一台主机装两个mysql数据库

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  4. c mysql备份还原数据库_如何备份和还原MySQL数据库?

    MySQL是一个永久存储数据的数据库服务器.如果使用MySQLServer,那么需要创建数据库备份以便从崩溃中恢复.mysql提供了一个用于备份的实用程序mysqldump.在本文中,将介绍关注与.s ...

  5. mysql使用释放资源_数据库--释放mysql数据库资源

    数据库--释放mysql数据库资源 背景 nikeodong 之前做了项目的数据库主从,在全备的过程发现数据库是越来越大了:最后发现是资源不释放的问题. 目的 为了解决 mysql 资源不释放的问题. ...

  6. 清空mysql注册表步骤_完全卸载MySQL 数据库清空MySql注册表

    完全卸载MySQL 数据库--清空MySql注册表 完全卸载Mysql的步骤主要有以下4步: 1. 通过控制面板- 卸载程序--mysql 将其卸载掉. 2. 删除Mysql 安装文件目录下的Mysq ...

  7. sql数据库和mysql有什么区别_【数据库】MySQL和sql的区别有哪些 - 收获啦

    sql是什么? sql,全称:结构化查询语言(Structured Query Language),是一种用于操作数据库的语言,它是用于所有数据库的基本语言.虽然,不同数据库之间存在较小的语法更改,但 ...

  8. navicat怎么安装mysql数据库_【20170825】从零开始学SQL数据库 安装mysql与navicat,开始练习...

    封面已经说明一切.左边mysql确实很酷炫,时时刻刻感觉自己像个程序猿,但是还是右边的navicat美化过后的界面更友好一些. 网上关于如何安装这两个软件已经有很多教程了,我选择了一个比较新的,且非常 ...

  9. mysql数据库访问问题吗_#MySQL数据库无法远程访问的问题

    在 Ubuntu上装了mysql,因为项目的数据库是mysql,将项目放在tomcat里面webapp下面,一直启动不成功.本来一直以为是jdbc驱动问题,后来发现不是. 1.cd /etc/mysq ...

最新文章

  1. String拼接字符串效率低,你知道原因吗?
  2. 2021年信号与系统作业统计处理
  3. Java 8特性有望进入.Net/Mono
  4. 数组分割问题——另一种方法
  5. eclipse 中自定义EL表达式时创建tld文件
  6. Xtract 实现 VMware Vsphere 迁主机到 Nutanix cluster
  7. Mysql问题 ERROR 1054 (42S22): Unknown column ‘password‘ in ‘field list‘
  8. Java Web 获取客户端真实IP
  9. ActivityMq的使用(小例子)
  10. JDK的安装及环境变量配置
  11. 沃特玛采集均衡模块_采集均衡模块以及电池管理系统_2016212573884_说明书_专利查询_专利网_钻瓜专利网...
  12. jxls对比_13、进阶之Jxls2与Jxls1的历史问题
  13. JAVA实现微信授权登录(详解)
  14. 阿里云ddns过程记录
  15. EF Data Operation With Async Task
  16. html两张图片无缝连接,如何实现两张图片的无缝结合
  17. 华为OD机试 - 网上商城优惠活动(Java JS Python)
  18. 南昌大学模电实验Multisim
  19. 【STM32WLE5之LoRa# 系列2、易智联LM401 评估板PingPong工程移植】
  20. 软件工程专插本_2021年软件工程专业-编译原理-考试大纲(专插本).docx

热门文章

  1. 免费的ipad编辑php软件下载,免费也很香!8 款免费 APP 打造你的学术型 iPad
  2. 什么是计算机网络 它有哪些主要功能,什么是计算机网络及主要功能有哪些?...
  3. 小程序不用服务器可以上线吗?
  4. java fuoco车架_为速度而生 JAVA Fuoco铝合金气动公路
  5. 解析华为MAS EIE系统硬件与软件结构
  6. Java Web概述-练习题
  7. Windows-dos命令
  8. 算法笔记 胡凡 codeup 吃糖果
  9. 计算2的N次方//C语言
  10. 华为、OPPO、vivo、小米牵头制定快充协议统一技术