【mysql】E3 基于Mysql的SQL应用和存储过程

E3 基于Mysql的SQL应用和存储过程
一、实验目的:
Mysql平台要求你熟练使用MySQL基本指令,完成对程序的控制与管理,并根据要求写存储过程。
二、实验要求:
1、基本硬件配置:英特尔Pentium III 以上,大于4G内存;
2、软件要求:Mysql;
3、时间:1小时;
4、撰写实验报告并按时提交。
三、实验内容:
Group1:Mysql基本代码
问题1:根据输入变量deptcode,编写代码块来获得雇员人数。

use example;
set @deptcode = 1;
set @personnum = 0;
select count(*) into @personnum from emp where deptno = @deptcode;
select @personnum;

在这里插入图片描述

问题2:编写一个包含部分定义、执行的代码块:根据员工的empno,输出员工姓名、工资和部门名称。

set @empcode = 2;
set @empname = "";
set @empsalary = 0;
set @deptname = "";
select ename, sal, dname into @empname, @empsalary, @deptname from emp, dept where emp.deptno = dept.deptno and empno = @empcode;
select @empname, @empsalary, @deptname;

在这里插入图片描述

问题3:编写一个代码块,根据员工编号的变量(empno),得到他的年收入和并输出。

set @empcode = 3;
set @empsalary = 0;
select sal into @empsalary from emp where empno = @empcode;
select @empsalary*12;

在这里插入图片描述

问题4:编写一个包含定义、执行的代码块,实现以下功能:根据部门编号变量的值输出该部门所有员工的平均工资。

set @deptcode = 1;
set @deptavgsalary = 0;	
select avg(sal) into @deptavgsalary from emp where deptno = @deptcode;
select @deptavgsalary;

在这里插入图片描述

Group 2:存储过程的编写和应用

问题1:请写一个存储过程:根据输入的参数员工编号得到该员工的姓名和工资。

delimiter //
create procedure select_info(in empcode int, out empname varchar(20),
 out empsalary float)
Begin
select ename, sal into empname, empsalary from example.emp where empn
o = empcode;
End
//
delimiter ;

在这里插入图片描述

set @empcode = 2;
set @empname = "";
set @empsalary = 0.0;
call select_info(@empcode, @empname, @empsalary);
select @empname, @empsalary;

在这里插入图片描述

问题2:编写一个存储过程完成以下功能:根据输入部门编号,得到该部门所有员工的平均工资,要求用输出变量带回调用的地方。

delimiter //
create procedure select_avgsal(in deptcode int, out empavgsal float)
Begin
select avg(sal) into empavgsal from emp where deptno = deptcode;
End
//

在这里插入图片描述

delimiter ;
set @deptcode = 1;
set @empavgsal = 0.0;
call select_avgsal(@deptcode, @empavgsal);
select @empavgsal;

在这里插入图片描述

问题3:编写一个存储过程,根据输入的参数员工编号更改员工的工资:如果员工的工资大于100,则在原值的基础上增加100;如果工资为0或null,则将其设置为200。

create procedure update_salary1(in empcode int, in salary float, out empsal float)
Begin
select sal into salary from emp where empno = empcode;
if salary > 100 then update example.emp set sal = sal + 100 where empno = empcode;
end if;
if salary = 0 or salary is null then update example.emp set salary = 200 where empn
o = empcode;
end if;
select sal into empsal from emp where empno = empcode;
end //

在这里插入图片描述

delimiter ;
set @empcode = 1;
set @salary = 0.0;
set @empsal = 0.0;
call update_salary1(@empcode, @salary, @empsal);
select @empcode, @empsal;

在这里插入图片描述

问题 4:编写一个带有输入参数、输出参数的存储过程,根据输入mgr编号得到该领导所带的职工人数。

delimiter //
create procedure select_mgr(in empmgr int, out empnum int)
select count(*) into empnum from emp where mgr = empmgr;
end //

在这里插入图片描述

delimiter ;
set @empmgr = 1;
set @empnum = 0;
call select_mgr(@empmgr, @empnum);
select @empmgr, @empnum;

在这里插入图片描述

问题5:编写一个存储过程,根据输入的部门编号更改该部门所有员工的工资:如果员工的工资大于1000,则在原值的基础上增加10%;如果工资大于1500,则提高8%。(需要使用游标)

delimiter //
create procedure update_Addsalary(in deptcode int)
begin
declare salary float; 
declare done int default 0; 
declare cur_sal cursor for select sal from emp where deptno = deptcode;
declare continue handler for not found set done = 1;
open cur_sal; 
repeat fetch cur_sal into salary;
if salary > 1000 and salary <= 1500 then update emp set sal = sal * 1.1;
end if;
if salary > 1500 then update emp set sal = sal * 1.08;
end if; 
until done end repeat;
close cur_sal;
end //

在这里插入图片描述

delimiter ;
set @deptcode = 2;
call update_salaryadd(@deptcode);

在这里插入图片描述

完事了!OK!
新手上路,有错请指正;

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Khalil三省

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值