肖sir__mysql之存储练习题__013

实验
一、

实验要求:

  1. 理解存储过程的概念
  2. 掌握存储过程的语法格式、使用方法
  3. 掌握存

储过程的创建、执行
二、实验前提:
– drop table if exists student;
– Create table student
– (Id varchar(255), #学号
– Name varchar(255), #姓名
– Roomid varchar(255), #班级
– Sex char(1), #性别
– Degree varchar(3) );#成绩;
Insert into student value

s(‘1’,‘amy’,‘8’,‘0’,‘65’);
Insert into student values(‘2’,‘bob’,‘4’,‘1’,‘80’);
Insert into student values(‘3’,‘candy’,‘6’,‘0’,‘70’);
Insert into student values(‘4’,‘danny’,‘8’,‘1’,‘90’);
Insert into student values(‘5’,‘edward’,‘8’,‘1’,‘95’);
Insert into student values(‘6’,‘frank’,‘7’,‘1’,‘100’);
在这里插入图片描述
1:创建一个存储过程,实现查询表student中的记录信息,并执行存储过程
建一个存储
结果:查询表student中的记录信息,
方法1:
delimiter //
drop procedure IF EXISTS xx;
CREATE PROCEDURE xx ()
BEGIN
SELECT * FROM student;
END//

call xx;

2:创建一个存储过程,根据给定的学生学号返回该学生的姓名
结果:学生姓名
条件:
语句:
select name from student wehre id =x
select name into y from student wehre id =x
方法:
delimiter //
create procedure student3(in x int(10),out y varchar(10))
BEGIN
select Name into y from student where id=x;
END //

call student3(1,@y)
select @y

3:创建一个存储过程,根据所给的班级的编号,统计该班人数,并将人数以输出变量返回给用户。
结果:
条件:roomid =x
select count(name) into y from roomid= x
方法:
delimiter //
create PROCEDURE student10(in z varchar(225),out x varchar(225))
begin
select count(id)into x from student where roomid =z;
END
//

call student10(“8”,@x)
select @x

方法2:
delimiter //
create PROCEDURE p3 (in x varchar(255) , out v int(10))
begin

SELECT count(student.Id) into v from student where student.Roomid=x ;

SELECT @v;

END//

call p3(‘8’,@v);
4:创建一个存储过程,根据所给的学号查询该学生的考试分数是否超过了85分, 若超过则输出“ 考得好”, 否则输出 “考得不好”。

结果:

85 “考的好”
考的不好

条件:select degree from student where id =x
判断if

方法1:
delimiter //
DROP PROCEDURE IF EXISTS stu4;
CREATE PROCEDURE stu4(IN x VARCHAR(225))
BEGIN
IF (SELECT Degree FROM student s WHERE x=s.Id)>85 THEN
SELECT “考得好”;
ELSE
SELECT “考得不好”;
END IF;
END
//
CALL stu4(5)

方法2:
delimiter //
create procedure student5(in x varchar(255), out y varchar(255))
BEGIN
select level into y from (select *, case when Degree >85 then “考得好” when Degree <=85 then “考得不好” end level from student) a where Id=x;
END
//

call student5(4,@y)
select @y

方法3:
drop procedure studentresult;
delimiter//
create procedure studentresult(in stuid varchar(20),out sturesult varchar(20))
begin
select degree into sturesult from student where id = stuid;
if(sturesult > 85) then
select ‘考得好’ ;
elseif(sturesult < 85) then
select ‘考得不好’ ;
end if;
end;
//
call studentresult(4,@sturesult);
方法4:
delimiter//
create procedure p6(in x int(10) )
BEGIN
DECLARE exam_score int DEFAULT (SELECT Degree FROM student WHERE Id = x);

IF exam_score > 85 THENSELECT '考得好' ;
ELSESELECT '考得不好' ;
END IF;

END//

call p6(4)

实验5:创建一个存储过程,对表student增加两条记录。

1,已建表,在插入数据
方法1:
drop procedure studentinsert;
delimiter//
create procedure studentinsert()
begin
insert into student values(7,‘mary’,7,1,75);
insert into student values(8,‘smith’,6,0,92);
end
//
call studentinsert();
select * from student;
方法2:
delimiter //
CREATE procedure cc()
BEGIN
declare i int DEFAULT (select count(id) from student) ;
insert into student(id) VALUES(i+1) ;
insert into student(id) VALUES(i+2) ;
select * from student ;
END
//

call cc()

2、不存在表,在如数据
a、方法1:

delimiter//
create procedure p7(in a int(10),in b VARCHAR(255),in a1 int(10),in b1 VARCHAR(255))
BEGIN
drop table if EXISTS s1;
create table s1(sid int(10) PRIMARY key,sname VARCHAR(255) );
insert into s1 VALUES (a,b);
insert into s1 VALUES (a1,b1);
SELECT * from s1;
end//
call p7(9,‘aa’,10,‘bb’)

6:请撰写一个存储过程,输出各班学生的平均成绩。
结果:avg(degree)
分组: roomid
select avg(degree) from student group by roomid;
方法:
drop procedure studentavg;
delimiter//
create procedure studentavg()
begin
select avg(degree) from student group by roomid;
end
//
call studentavg();

7:请撰写一个存储过程,能根据用户输入的学号,输出学生的姓名、性别到两个参数变量中,以供其它程序使用。
结果:姓名、性别
条件:
方法1select name,sex into m,n from id=x

drop procedure if exists studentnamesex ;
delimiter//
create procedure studentnamesex(in stuid varchar(20),out stuname varchar(20),out stusex char(10))
begin
select name,sex into stuname ,stusex from student where id = stuid;
end
//
call studentnamesex(1,@stuname,@stusex);
select @stuname,@stusex;

方法2:
select name into m from id=x
select sex into n from id=x

drop procedure if exists studentnamesex ;
delimiter//
create procedure studentnamesex(in stuid varchar(20),out stuname varchar(20),out stusex char(10))
begin
select name into stuname from student where id = stuid;
select sex into stusex from student where id = stuid;
end
//
call studentnamesex(1,@stuname,@stusex);
select @stuname,@stusex;

方法3:
drop procedure if exists studentnamesex ;
delimiter//
create procedure studentnamesex(in stuid varchar(20))
begin
set@y=(select name from student where id = stuid);
set@z=(select sex from student where id = stuid);
select @y,@z ;
end
//
call studentnamesex(1);

8:撰写一个存储过程,根据用户输入的学号,输出学生性别,成绩两个参数放到新表temp中Create table temp(Sex varchar(255),Degree varchar(255));

结果:性别,成绩
条件:输入的学号 ,建表

方法1:
delimiter //
drop procedure if EXISTS student2 ;
create procedure student2(in x int(10))
BEGIN
drop table if exists temp;
create table temp(Sex1 char(1) , Degree1 varchar(3));
insert into temp(Sex1,Degree1) select Sex,Degree from student where x=Id;
select * from temp;
end
//

call student2(2)

方法2:

delimiter //
drop PROCEDURE if EXISTS p9 ;
create PROCEDURE p9( in I int(10),out s VARCHAR(255),out d VARCHAR(255))
BEGIN

SELECT Sex,Degree into s,d from student where Id = I ;
SELECT @s,@d;
drop table if EXISTS temp;
Create table temp(Sex varchar(255),Degree varchar(255));
insert into temp VALUES(@s,@d);
SELECT * from temp;
END

call p9(2,@s,@d)
方法3:

两张表的字段一致,插入数据:
方法一:insert into 目标表 select * from 来源表;#插入全部数据
方法二:insert into 目标表(字段 )select 字段1,字段2 from 来源表。

9:请撰写一个存储过程,求1+2+3+…x的值。
方法1:
delimiter //
drop procedure if exists he;
create procedure he(inout x int(10))
BEGIN
set x=x*(x+1)/2;
END

set @x=10
call he(@x)
select @x

方法2:
drop procedure if exists studentadd1;
delimiter//
create procedure studentadd1(in x varchar(20))
begin
declare result varchar(255) default 0;
while x > 0 do
set result = result + x;
set x = x - 1;
end while;
select result;
end;
//
call studentadd1(10);

方法3:

Delimiter //
Create procedure stu9(in x VARCHAR(225))
Begin
Declare i int default 1;
Declare num int default 0;
While i<=x do
Set num=num+i;
Set i=i+1;
End while;
Select num;
End
//
call stu9(10)

请撰写一个存储过程,求0+2+4+…x的值。
方法1:
delimiter //
drop PROCEDURE if EXISTS p11;
create PROCEDURE p11(in x int)
BEGIN

DECLARE i int DEFAULT 0;
DECLARE s int DEFAULT 0;
WHILE i<=x do

set s=i+s;
set i=i+2;
end WHILE ;
select s;
END//

call p11(10)
方法2:
drop procedure if exists studentadd1;
delimiter//
create procedure studentadd1(in x varchar(20))
begin
declare result varchar(255) default 0;
while x > 0 do
set result = result + x;
set x = x - 2;
end while;
select result;
end;
//
call studentadd1(10);

请撰写一个存储过程,求1+3+5+…x的值。

方法:
delimiter //
drop PROCEDURE if EXISTS p11;
create PROCEDURE p11(in x int)
BEGIN

DECLARE i int DEFAULT 1;
DECLARE s int DEFAULT 0;
WHILE i<=x do

set s=i+s;
set i=i+2;
end WHILE ;
select s;
END//

call p11(10)

方法2:
drop procedure if exists studentadd1;
delimiter//
create procedure studentadd1(in x varchar(20))
begin
declare result varchar(255) default 0 ;
while x > 0 do
set result = result + x;
set x = x - 2;
end while;
select result;
end;
//
call studentadd1(9);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/139819.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

滴滴一面:线程池任务,如何设置优先级?

说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如滴滴、极兔、有赞、希音、百度、网易的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 如何设计线程池&#xff1f;请手写一个简单线程池&#xff1f; 就在昨天&…

认识面向对象-PHP8知识详解

面向对象编程&#xff0c;也叫面向对象程序设计&#xff0c;是在面向过程程序设计的基础上发展而来的&#xff0c;它比面向过程编程具有更强的灵活性和扩展性。 它用类、对象、关系、属性等一系列东西来提高编程的效率&#xff0c;其主要的特性是可封装性、可继承性和多态性。…

NIO简单介绍

一、什么是NIO 1、Java NIO全称java non-blocking IO&#xff0c; 是指JDK提供的新API。从JDK1.4开始&#xff0c;Java提供了一系列改进的输入/输出的新特性&#xff0c;被统称为NIO(即New IO)&#xff0c;是同步非阻塞的 2、NIO有三大核心部分: Channel(通道)&#xff0c; Buf…

leetcode1516.移动N叉树的子树

题目 给定一棵没有重复值的 N 叉树的根节点 root ,以及其中的两个节点 p 和 q。 移动节点 p 及其子树,使节点 p 成为节点 q 的直接子节点。 如果 p 已经是 q 的直接子节点,则请勿改动任何节点。 节点 p 必须是节点 q 的子节点列表的最后一项。 返回改动后的树的根节点。 节点…

WebGL 从0到1绘制一个立方体

目录 前言 组成立方体的面、三角形、顶点坐标和顶点颜色 通过顶点索引绘制物体 gl.drawElements(mode, count, type, offset) 函数规范 示例程序 彩色立方体&#xff08;HelloCube.js&#xff09; 代码详解 向缓冲区中写入顶点的坐标、颜色与索引 gl.ELEMENT_ARRAY_B…

CorelDraw是什么软件?好用吗

很多人都听过CorelDraw的名字&#xff0c;但不知道CorelDraw是什么样的软件。下面就让小编为大家详细介绍一下。 coreldraw是什么软件 CorelDraw是一款专业的图形设计软件。它的主要功能包括矢量图形和位图的编辑。用户可以利用其矢量图形编辑能力,设计各种图标、Logo等精细图…

java框架-Spring-事务

配置 配置事务管理器方法&#xff1a; Beanpublic PlatformTransactionManager platformTransactionManager(){return new DataSourceTransactionManager();}原理

短信登录功能如何实现?

简介&#xff1a; 在日常生活中我们登录/注册某些网站/APP是通常可以选择 密码登录和手机号登录。 为什么手机号发送后会有验证码返回呢&#xff1f; 网站如何识别我的验证码是否正确&#xff1f; 如果我的个人网站也想要实现短信登录功能&#xff0c;具体该如何实现&#xff1…

Webpack监视文件修改,自动重新打包文件

方法一&#xff1a;使用watch监视文件变化 在终端中输入以下指令&#xff1a; npx webpack --watch 我们使用这种方法监听文件变化时只会监听我们计算机本地的文件变化&#xff0c;在开发场景中我们的项目是要部署到服务器中的&#xff0c;因此这种方式并不推荐。 方法二&…

8款常见的自动化测试开源框架

在如今开源的时代&#xff0c;我们就不要再闭门造车了&#xff0c;热烈的拥抱开源吧&#xff01;本文针对性能测试、Web UI 测试、API 测试、数据库测试、接口测试、单元测试等方面&#xff0c;为大家整理了github或码云上优秀的自动化测试开源项目&#xff0c;希望能给大家带来…

Python_it_heima

P63 list P68 元组 注意&#xff1a;元组内部嵌套的list包含的内容可以修改&#xff0c;但list本身不能修改。 P69 字符串 P71 数据容器&#xff08;序列&#xff09;的切片 P73 集合 P75 字典 字典的常用操作 字典课后练习 P78 类数据容器的总结对比 P79 数据容器的通用操作 不…

useCallBack

React.memo 保证了只有props发生变化时&#xff0c;该组件才会重新渲染 &#xff08;当然组件内部的state 和 context 变化也会导致组件重新渲染&#xff09;&#xff0c;但咱们只要将咱们的子组件包裹&#xff0c;便可以保证Child组件在props不变的情况下&#xff0c;不会重新…

万字解析30张图带你领略glibc内存管理精髓

最近在逛知乎的时候&#xff0c;看到篇帖子&#xff0c;如下&#xff1a; 看了下面所有的回答&#xff0c;要么是没有回答到点上&#xff0c;要么是回答不够深入&#xff0c;所以&#xff0c;借助本文&#xff0c;深入讲解C/C内存管理。 1 写在前面 源码分析本身就很枯燥乏味…

007 数据结构_堆——“C”

前言 本文将会向您介绍关于堆Heap的实现 具体步骤 tips&#xff1a;本文具体步骤的顺序并不是源代码的顺序 typedef int HPDataType; typedef struct Heap {HPDataType* _a;int _size;int _capacity; }Heap;初始化 void HeapCreate(Heap* hp, HPDataType* a, int n) {hp-&…

代码随想录算法训练营 动态规划part08

一、单词拆分 139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; 将字符串 s 长度记为 n&#xff0c;wordDict 长度记为 m。为了方便&#xff0c;我们调整字符串 s 以及将要用到的动规数组的下标从 1 开始。 定义 f[i] 为考虑前 i 个字符&#xff0c;能否使用 wordDict 拼…

linux进程杀不死

项目场景&#xff1a; 虚拟机 问题描述 linux进程杀不死 无反应 原因分析&#xff1a; 进程僵死zombie 解决方案&#xff1a; 进proc或者find命令找到进程所在地址 cat status查看进程杀死子进程

多输入多输出 | MATLAB实现CNN-BiGRU卷积双向门控循环单元多输入多输出

多输入多输出 | MATLAB实现CNN-BiGRU卷积双向门控循环单元多输入多输出 目录 多输入多输出 | MATLAB实现CNN-BiGRU卷积双向门控循环单元多输入多输出预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 MATLAB实现CNN-BiGRU卷积双向门控循环单元多输入多输出&#xf…

Otter改造 增加springboot模块和HTTP调用功能

环境搭建 & 打包 环境搭建&#xff1a; 进入 $otter_home/lib 目录执行&#xff1a;bash install.sh 打包&#xff1a; 进入$otter_home目录执行&#xff1a;mvn clean install -Dmaven.test.skip -Denvrelease发布包位置&#xff1a;$otter_home/target 项目背景 阿里…

「大数据-0」虚拟机VMware安装、配置、使用、创建大数据集群教程

目录 一、下载VMware Wworkstation Pro 16 二、安装VMware Wworkstation Pro 16 三、检查与设置VMware的网卡 1. 检查 2. 设置VMware网段 四、在VMware上安装Linux虚拟机 五、对安装好的虚拟机进行设置 1. 打开设置 2. 设置中文 3. 修改字体大小 4. 修改终端字体大小 5. 关闭虚…

十、性能测试之数据库测试

性能测试之数据库测试 一、 数据库分类二、 mysql安装及密码的修改1、安装&#xff1a;数据库的版本 mysql5.7版方法1&#xff1a;直接安装方法2&#xff1a;使用rpm包安装方法3&#xff1a;docker方式安装 2、修改数据库的密码3、创建库4、创建表 三、存储引擎1、InnoDB特点 2…