ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql数据库实验13

2021-12-19 16:34:39  阅读:176  来源: 互联网

标签:salary 13 set employees delimiter mysql where 数据库 select


本系列最后一篇文章 已经更新完成!!!

2. 创建存储过程,实现的功能是:根据输入的员工姓名删除employees表中对应的员工信息。调用这个存储过程,输入参数为:‘李丽’,查看结果。

 delimiter $$
create procedure  delete_name(in a char(6))
begin
	delete from employees where name=a;
end $$
delimiter ;

call delete_name('李丽');

select * from employees;

3. 创建存储过程,实现的功能是:比较两个输入的浮点参数,若前者大,输出’大于’,若前者小,输出’小于’,否则输出’等于’。调用这个存储过程,输入参数为10.2,22.8,查看结果。

 delimiter $$
create procedure compar(in k1 Float, in k2 Float, out k3 char(6) )
begin
	if k1>k2 then
		set k3= '大于';
	elseif k1=k2 then
		set k3= '等于';
	else 
		set k3= '小于';
	end if;
end$$
delimiter ;

call compar(10.2,22.8,@k);

select @k;
DROP PROCEDURE compar;

4. 创建存储过程,实现的功能是:根据输入的员工姓名输出该员工所在的部门名称。调用这个存储过程,输入参数为:‘王林’,查看结果。

 delimiter $$
create procedure  xz(in xm char(6))
begin
select departmentname from departments 
where departmentid=(select departmentid from employees 
where name=xm);
end $$
delimiter ;

call xz('王林');

select @部门名称;

DROP PROCEDURE  xz;

5. 创建存储过程,实现的功能是:根据输入的员工姓名比较两个员工的实际收入,若前者大,输出’1’,若前者小,输出’-1’,否则输出’0’。调用这个存储过程,查看结果。

 delimiter $$
create procedure bj(in xm1 char(6),in xm2 char(6),out BJ int)
begin
declare sr1,sr2 float(8);
select inCome-outCome into sr1 from salary 
where employeeID=(select employeeid from employees where name =xm1);
select inCome-outCome into sr2 from salary 
where employeeID=(select employeeid from employees where name =xm2);
if xm1>xm2 then
set BJ=1;
elseif xm1<xm2 then
set BJ=-1;
else 
set BJ=0;
end if;
end $$
delimiter;

call bj('王林','刘明',@bjdx);

DROP PROCEDURE  bj;

6. 创建存储过程,要求当一个员工的工作时间大于6年时,将其转到经理办公室工作。调用这个存储过程,查看结果。

 delimiter $$
create procedure cg(in id char(6))
begin
declare year tinyint;
select workyear into year  from  employees where employeeid= id; 	
if year>6 then
update employees set departmentID=(select departmentID from departments
where departmentName='经理办公室') where employeeID=id;
end if;
end$$

delimiter ;

call cg('000001');

DROP PROCEDURE  cg;

7. 创建存储过程,使用游标方式计算employees表中行的数目。调用这个存储过程,查看结果。

delimiter $$
create procedure number(out pnumber int)
begin
declare a int;  
declare found bool default true;
declare c cursor for
select employeeid from employees;  
declare continue handler for not found
set found=false;  
set pnumber=0;
open c; 
fetch c into a; 
while found do
set pnumber=pnumber+1;
fetch c into a;
end while;  
close c;  
end$$

delimiter ;
call number(@pnumber);

select @pnumber;

select count(*) from employees;

DROP PROCEDURE  num;
	 

8. 创建存储过程,使用count(*)函数计算employees表中行的数目。调用这个存储过程,查看结果。

delimiter $$
create procedure  cx(out a1 int)
begin
declare a2 int;
set a2=(select count(*) from employees);
set a1=a2;
end $$
delimiter ;

call cx(@hangshu);

select @hangshu;

9. 创建存储过程,根据输入的部门名称,输出该部门收入最高的员工姓名。

 delimiter $$
create procedure max1(in a char (15),out  str char (10))
begin 
declare deid char (3) ; 
declare max2 double  ; 
declare id2 char (10);
set deid = (select departmentID  from departments where departmentName = a );
set max2= (select max(Income ) from employees a, salary b where  a.employeeID = b.employeeID and a.departmentID = deid );
Set  id2=(select employeeID from salary where Income = max2);
set str=(select name from employees where employeeID =id2);
end $$

delimiter ;

call max1('财务部',@max);

select @max;

DROP PROCEDURE  max1;

10. 创建存储过程,根据输入的整数,输出1到该整数的累加结果。

delimiter $$
create procedure plus(in k int(4),out sum1 int )
begin
declare i int;
set i=1;
set sum1=0;
while i<=k do
set sum1=sum1+i;
set i=i+1;
end while;
end $$

delimiter ;


call plus(5,@sum1);

select @sum1;

11. 创建一个存储函数,返回员工的平均实际收入。调用该存储函数。

 delimiter $$
create function num()
returns integer
begin
return (select count(*) from employees);
end $$

delimiter ;

select num();

drop function num;

12. 创建一个存储函数,根据输入的员工编号,若该员工收入大于3000元,则在employees表和salary表删除该员工信息,返回’大于3000元已删除’,否则返回’不大于3000元保留’。 调用该存储函数,查看结果。

 delimiter $$
create function delete1(id char (10))
returns char(15)
begin 
declare b  int ;
declare  str char (15);
set b = (select Income from salary where employeeID = id);
if b>3000  then 
set str = '大于3000元已删除';
delete from employees where employeeID =id;
delete from salary where employeeID=id;
else 
set str  ='不大于3000元保留';
Return str;
end if ;
end $$

delimiter ;

select delete1('000001');

drop function delete1;

** 13. 创建存储函数,根据输入的员工姓名,判断员工是否在研发部工作,若是则返回其学历,若不是则返回’不是研发部员工’。**

 delimiter $$
create function panduan(nm char (10))
returns char(15)
begin 
declare  b  char(15) ;
declare  str char (15);
set b=(select departmentname from departments where departmentid = (select departmentid from employees where name=nm));
if b='研发部'  then 
set str= (select education from employees where name=nm);
else 
set str='不是研发部员工';
end if ;
return str;
end $$

delimiter ;

select panduan('叶凡');

drop function panduan;

14. 创建一个存储函数,将工作时间满4年的员工收入增加500元。

 delimiter $$
create function sj()
begin 
update salary set income=income+500 where salary.employeeid=employees.employeeid and workyear>4;
end $$

delimiter ;

select sj();

drop function panduan;



delimiter $$
create function add3()
returns char(10)
begin declare done int default 0;
declare id char (8);
declare  nb  cursor for select employeeID from employees where workyear>=4;
declare  continue  handler  for  not  found
set done =1;
open nb ;
xh:loop
fetch nb into id;
If done =1 then leave xh;
End if ;
update salary set Income= Income +500 where employeeID= id;
End loop;
close nb ;
return '执行完成';
end$$
delimiter ;

select add3();

drop function add1;

15. 创建触发器,在employees表中删除员工信息的同时将salary表中该员工的信息删除,以确保数据完整性。创建完后删除employees表中的一行数据,然后查看salary表中的变化情况。

 delimiter $$
create trigger delete2 after delete
on employees for each row
delete from salary where employeeid=old.employeeid;
end$$
delimiter ;

delete from employees where employeeid='000001';

select * from salary;


drop trigger delete2;
 
 

16. 创建update_employees触发器,当departments表中的部门号发生变化时,employees表中员工所属的部门号也将改变。创建完后修改departments表中的一个部门号,然后查看employees表中的变化情况。

 delimiter $$
create trigger update_employees after update
on departments for each row
begin
update employees set departmentid=new.departmentid 
where departmentID= old.departmentID;
end$$
delimiter ;

select * from employees;

update departments set departmentid =8 where departmentname='研发部';

select * from employees;

drop trigger update_employees;

17. 创建update_salary_outCome触发器,当salary表中的收入增加500元时,支出也增加500元。创建完后修改salary表中的收入,然后查看表的变化情况。

delimiter $$
create trigger update_salary_outCome before update 
on salary for each row 
begin
declare a int ;
set a=(new.Income-old.Income);
set new.Outcome =old.Outcome +a ;
end$$
delimiter ;

select * from salary;

update salary set income =income+500 where employeeid='010008';

select * from salary;

标签:salary,13,set,employees,delimiter,mysql,where,数据库,select
来源: https://blog.csdn.net/fly_pig_wind/article/details/122025631

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有