数据库进阶练习

进阶数据库训练任务

任务内容

数据表

	雇员表(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. 查询比销售部门所有员工基本工资都高的雇员姓名

任务代码

创建表

CREATE TABLE `employee` (
  `empid` varchar(10) NOT NULL,
  `name` varchar(10) DEFAULT NULL,
  `sex` varchar(2) DEFAULT NULL,
  `title` varchar(10) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `depid` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`empid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

 create table department(
 depid varchar(10) primary key,
 depname varchar(20));

create table salary(
    empid varchar(10) not null,
    basesalary decimal(19,2),
    titlesalary decimal(19,2),
    deduction decimal(19,2)
);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pbt58u3J-1606462193987)(C:\Users\刘元汉\Desktop\数据库\任务卡笔记\任务2.assets\image-20201124173646239.png)]

增加内容

insert into employee values
('01','李四',null,'师','1990-9-8','03'),
('02','王五',null,'工程师','1990-8-8','03'),
('06','张三',null,'hr','1990-7-8','01'),
('03','周元',null,'hr','1990-9-9','01'),
('04','二蛋',null,'调节师','1990-10-8','02'),
('05','麻子',null,'调节师','1990-7-8','02');
//由于5插一条
('06','张三',null,'hr','1990-7-8','03');
//由于10插一条
('07','富婆',null,'工程师','1990-7-8','03');
insert into department values
('01','人事'),
('02','销售'),
('03','技术');

insert into salary values
('01',1000,3000,200),
('02',2000,4000,100),
('03',1500,1000,300),
('04',1400,5000,200),
('05',2100,3000,500),
('06',3200,5000,300);
//由于10插一条
('07',5000,5000,300);
select * from employee;
select * from department;
select * from salary;

在2需求处理后的结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JQkKmxWt-1606462193995)(C:\Users\刘元汉\Desktop\数据库\任务卡笔记\任务2.assets\image-20201124181337522.png)]

实现需求

  1. 修改表结构,在部门表中添加部门简介字段
alter table department add department_intro varchar(10);
select * from department;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TXH81fS0-1606462193998)(C:\Users\刘元汉\Desktop\数据库\任务卡笔记\任务2.assets\image-20201124181613875.png)]

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

update employee , salary  
set 
employee.title='工程师',salary.basesalary=2000,salary.titlesalary=700
where 
employee.empid=salary.empid and employee.name='李四';

在上面的图中有

  1. 删除人事部门的部门记录
delete from employee
where depid=(select depid from department where depname='人事') ;
select * from employee;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q0bAmOWM-1606462194002)(C:\Users\刘元汉\Desktop\数据库\任务卡笔记\任务2.assets\image-20201124183609791.png)]

  1. 查询出每个雇员的雇员编号,实发工资,应发工资(下面实发和应发写反了。。)
select employee.empid,salary.basesalary+salary.titlesalary as '实发',salary.basesalary+salary.titlesalary-salary.deduction as '应发'
from employee,salary
where employee.empid=salary.empid;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sTKkuu8C-1606462194006)(C:\Users\刘元汉\Desktop\数据库\任务卡笔记\任务2.assets\image-20201124200116248.png)]

  1. 查询姓张且年龄小于 40 的员工记录
select *  from employee where name like '张%' and birthday>'1980-11-24';
//真实版
select * from employee where name like '张%' and 
(year(now())-year(birthday))>40;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WlIFhY0K-1606462194008)(C:\Users\刘元汉\Desktop\数据库\任务卡笔记\任务2.assets\image-20201124213441657.png)]

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

注意一定要加限制,不然会造成笛卡儿积(即row*row*row)

select employee.empid,employee.name,employee.title,department.depname,salary.basesalary+salary.titlesalary-salary.deduction  as '实发'
from employee,department,salary
where employee.depid=department.depid and salary.empid=employee.empid;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nSvfwdVJ-1606462194009)(C:\Users\刘元汉\Desktop\数据库\任务卡笔记\任务2.assets\image-20201124201408526.png)]

  1. 查询销售部门的雇员姓名,工资
select employee.name,salary.basesalary 
from employee
join salary
on salary.empid=employee.empid
join department on employee.depid=department.depid
where department.depname='销售';

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s5Vnix4W-1606462194011)(C:\Users\刘元汉\Desktop\数据库\任务卡笔记\任务2.assets\image-20201124202026402.png)]

  1. 统计各职称的人数
//title不会影响
select title,count(*) from employee group by depid,title;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fE0UXw5V-1606462194012)(C:\Users\刘元汉\Desktop\数据库\任务卡笔记\任务2.assets\image-20201124202329774.png)]

  1. 统计各部门的部门名称,实发工资总和,平均工资
select department.depname,
sum(salary.basesalary+salary.titlesalary-salary.deduction)  
as '实发总和',
round(avg(salary.basesalary+salary.titlesalary-salary.deduction),2)
as '平均工资'
from department,salary
join employee on salary.empid=employee.empid
where department.depid=employee.depid
group by department.depname;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YojPYhNj-1606462194014)(C:\Users\刘元汉\Desktop\数据库\任务卡笔记\任务2.assets\image-20201124203009284.png)]

  1. 查询比销售部门所有员工基本工资都高的雇员姓名
//感觉应该会有更简便的,欢迎大家留言告知我
select employee.name 
from employee join salary
on employee.empid=salary.empid
join department on employee.depid=department.depid
where basesalary>any(select max(basesalary)
from employee join salary
on employee.empid=salary.empid
join department on employee.depid=department.depid
where depname='销售');

插入数据前:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wFcnfxm4-1606462194016)(C:\Users\刘元汉\Desktop\数据库\任务卡笔记\任务2.assets\image-20201124205209322.png)]

插入数据后:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7XTsUSc5-1606462194017)(C:\Users\刘元汉\Desktop\数据库\任务卡笔记\任务2.assets\image-20201124211705526.png)]

总结:

1、题目难度适当,除了生日获取年龄上找不到解决方案,其他的难度不大

2、只删除数据不删除表用truncate table 表名

3、对表字段操作用alter table ,对表直接针对表即可

``

插入数据前:

[外链图片转存中…(img-wFcnfxm4-1606462194016)]

插入数据后:

[外链图片转存中…(img-7XTsUSc5-1606462194017)]

总结:

1、题目难度适当,除了生日获取年龄上找不到解决方案,其他的难度不大

2、只删除数据不删除表用truncate table 表名

3、对表字段操作用alter table ,对表直接针对表即可

ps:如果觉得这篇文章能够帮到你,就赏个赞呗~~(不要脸)

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值