下面是练习题
1、while循环的存储过程(从1加到100)
/*
Navicat Premium Data Transfer
Source Server : jack
Source Server Type : MySQL
Source Server Version : 80021
Source Host : localhost:3306
Source Schema : mysql8
Target Server Type : MySQL
Target Server Version : 80021
File Encoding : 65001
Date: 16/10/2021 11:30:36
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for test1016
-- ----------------------------
DROP TABLE IF EXISTS `test1016`;
CREATE TABLE `test1016` (
`id` int(0) NULL DEFAULT NULL,
`uname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NULL DEFAULT NULL,
`score` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of test1016
-- ----------------------------
INSERT INTO `test1016` VALUES (1, 'MM', 'f');
INSERT INTO `test1016` VALUES (2, 'MM', 'f');
INSERT INTO `test1016` VALUES (3, 'MM', 'f');
INSERT INTO `test1016` VALUES (4, 'MM', 'f');
INSERT INTO `test1016` VALUES (5, 'MM', 'f');
INSERT INTO `test1016` VALUES (6, 'MM', 'f');
INSERT INTO `test1016` VALUES (7, 'MM', 'f');
INSERT INTO `test1016` VALUES (8, 'MM', 'f');
INSERT INTO `test1016` VALUES (9, 'MM', 'f');
INSERT INTO `test1016` VALUES (10, 'MM', 'f');
SET FOREIGN_KEY_CHECKS = 1;
##################################################################### 上面是建表语句
##################################################################### 下面是存储过程语句
-- MySQL中的三中循环 while 、 loop 、repeat 求 1-n 的和
-- 第一种 while 循环
-- 求 1-n 的和
/* while循环语法:
while 条件 DO
循环体;
end while;
*/
create procedure sum1(a int)
begin
declare sum int default 0; -- default 是指定该变量的默认值
declare i int default 1;
while i<=a DO -- 循环开始
set sum=sum+i;
set i=i+1;
end while; -- 循环结束
select sum; -- 输出结果
end;
-- 执行存储过程
call sum1(100);
-- 删除存储过程
drop procedure if exists sum1;
############################################################################
-- 自己出的第一道题,向自然学习。
-- 第一步,把偶数的数,都加100
-- 第二部,把奇数的数,都乘以2
-- 原始表内容
select * from test1016;
-- 第一种实现方法
select *,if(id%2=0,id+100,id*2) as result_num from test1016;
-- 第二种实现方法
-- case ,
-- when, then,
-- else, end;
-- 这几个关键字的用法
select *,
case
when id%2=0 then id+100
when id%2=1 then id*2
else '不是数字'
end result_num
from test1016;
2、向一张表中插入数据(此表两个varchar字段)
create procedure sum_total(a int)
begin
declare sum int default 0; -- default 是指定该变量的默认值
declare i int default 1;
while i<=a DO -- 循环开始
set sum=sum+i;
set i=i+1;
-- 向一张表中插入数据(此表两个varchar字段)
INSERT into abcd VALUES(i,i+1);
end while; -- 循环结束
select sum; -- 输出结果
end;
-- 执行存储过程
call sum_total(100);
-- 删除存储过程
drop procedure if exists sum_total;
3、带数字和字符串,两个参数的存储过程调用:
------------------------------------------------- 创建表 :
DROP TABLE IF EXISTS `abcd`;
CREATE TABLE `abcd` (
`ab` varchar(255) ,
`cd` varchar(255)
) ;
-- select * from abcd;
---------------------------------------------------- 调用存储过程:
create procedure sum_total(in a int, in bs VARCHAR(100))
begin
declare sum int default 0; -- default 是指定该变量的默认值
declare i int default 1;
while i<=a DO -- 循环开始
set sum=sum+i;
set i=i+1;
-- 向一张表中插入数据(此表两个varchar字段)
INSERT into abcd VALUES(i, bs);
end while; -- 循环结束
select sum; -- 输出结果
end;
-- 执行存储过程
call sum_total(100,'测试字符串');
-- 删除存储过程
drop procedure if exists sum_total;
4、和上面用的同一张表,字符串与数字拼接,保存。用concat函数:
INSERT into abcd VALUES(i, CONCAT(bs, i));
create procedure sum_total(in a int, in bs VARCHAR(100))
begin
declare sum int default 0; -- default 是指定该变量的默认值
declare i int default 1;
while i<=a DO -- 循环开始
set sum=sum+i;
set i=i+1;
-- 向一张表中插入数据(此表两个varchar字段)
INSERT into abcd VALUES(i, CONCAT(bs, i));
end while; -- 循环结束
select sum; -- 输出结果
end;
-- 执行存储过程
call sum_total(100,'测试字符串');
-- 删除存储过程
drop procedure if exists sum_total;