关于MySql存储过程的学习(各种语法)还有 判断、循环
作者:互联网
– 创建db8数据库
CREATE DATABASE db8;
– 使用db8数据库
USE db8;
– 创建学生表
create table student(
id int primary key auto_increment,
name varchar(20),
age int,
gender varchar(5),
score int
);
– 添加数据
insert into student values (NULL,‘张三’,23,‘男’,95),(NULL,‘李四’,24,‘男’,98),
(NULL,‘王五’,25,‘女’,100),(NULL,‘赵六’,26,‘女’,90);
– 按照性别进行分组,查询每组学生的总成绩。按照总成绩的升序排
select gender,SUM(score) getSum from student group by gender order by getSum asc;
#创建存储过程
– 修改分隔符为$
/*
DELIMITER $
– 标准语法
– 在MySql的存储过程当中,虽然没有返回值,但是可以由传出参数,并且这个传出参数可以写多个
CREATE PROCEDURE 存储过程名称(参数…)
BEGIN
sql语句;
END$
– 修改分隔符为分号
DELIMITER ;*/
– 调用存储过程
#call 存储过程名称(实际参数)
– 创建存储过程,封装分组查询学生总成绩的sql语句
delimiter $
create procedure stu_group()
begin
select gender,SUM(score) getSum from student group by gender order by getSum asc;
end$
delimiter ;
call stu_group();
#查看存储过程
#SELECT * FROM mysql.proc WHERE db=‘数据库名称’;
select * from mysql.proc where db=‘db8’;
#删除存储过程语法
#DROP PROCEDURE [IF EXISTS] 存储过程名称;
– 删除stu_group存储过程
drop procedure stu_group;
#变量的使用
#DECLARE 变量名 数据类型 [DEFAULT 默认值];
delimiter $
create procedure pro_test1()
begin
declare num int default 10;
select num;
end$
delimiter ;
call pro_test1();
#变量的赋值1
#SET 变量名 = 变量值;
delimiter $
create procedure pro_test2()
begin
declare name varchar(10);
set name = ‘存储过程’;
select name;
end$
delimiter ;
call pro_test2();
#变量的赋值2
#SELECT 列名 INTO 变量名 FROM 表名 [WHERE 条件];
– 定义两个int变量,用于存储男女同学的总分数
delimiter $
create procedure pro_test3()
begin
declare men,women int;
select SUM(score) into men from student where gender=‘男’;
select SUM(score) into women from student where gender=‘女’;
select men,women;
end$
delimiter ;
call pro_test3();
#if语法的使用
/*
IF 判断条件1 THEN 执行的sql语句1;
[ELSEIF 判断条件2 THEN 执行的sql语句2;]
…
[ELSE 执行的sql语句n;]
END IF;*/
/*
定义一个int变量,用于存储班级总成绩
定义一个varchar变量,用于存储分数描述
根据总成绩判断:
380分及以上 学习优秀
320 ~ 380 学习不错
320以下 学习一般
*/
delimiter $
create procedure pro_test4()
begin
declare total int;
declare description varchar(10);
select SUM(score) into total from student;
if total >= 380 then
set description=‘学习优秀’;
elseif total >=320 and total <= 380 then
set description=‘学习不错’;
else
set description=‘学习一般’;
end if;
select total,description;
end$
delimiter ;
call pro_test4();
#参数传递
ELIMITER $
– 标准语法
/*CREATE PROCEDURE 存储过程名称([IN|OUT|INOUT] 参数名 数据类型)
BEGIN
执行的sql语句;
END$
IN:代表输入参数,需要由调用者传递实际数据。默认的
OUT:代表输出参数,该参数可以作为返回值
INOUT:代表既可以作为输入参数,也可以作为输出参数
DELIMITER ;
*/
#输入参数
/*
输入总成绩变量,代表学生总成绩
定义一个varchar变量,用于存储分数描述
根据总成绩判断:
380分及以上 学习优秀
320 ~ 380 学习不错
320以下 学习一般
*/
delimiter $
create procedure pro_test5(in total int)
begin
declare description varchar(30);
if total >= 380 then
set description= ‘学习优秀’;
elseif total >= 320 and total <380 then
set description = ‘学习不错’;
else
set description = ‘学习一般’;
end if;
select total,description;
end$
delimiter ;
call pro_test5(300);
call pro_test5((select SUM(score) from student));
#输出参数
/*DELIMITER $
– 标准语法
CREATE PROCEDURE 存储过程名称(OUT 参数名 数据类型)
BEGIN
执行的sql语句;
END$
DELIMITER ; */
/*
输入总成绩变量,代表学生总成绩
输出分数描述变量,代表学生总成绩的描述
根据总成绩判断:
380分及以上 学习优秀
320 ~ 380 学习不错
320以下 学习一般
*/
delimiter $
create procedure pro_test6(in total int, out description varchar(10))
begin
if total > 380 then
set description = ‘学习优秀’;
elseif total >=320 and total < 300 then
set description =‘学习不错’;
else
set description = ‘学习一般’;
end if;
end $
delimiter ;
call pro_test6(310,@A);
select @A;
#case语句的使用 标准语法1
/*
CASE 表达式
WHEN 值1 THEN 执行sql语句1;
[WHEN 值2 THEN 执行sql语句2;]
…
[ELSE 执行sql语句n;]
END CASE; */
delimiter $
create procedure proc5()
begin
declare sex varchar(20);
set sex = ‘男’;
case sex
when ‘男’ then select ‘男生’;
when ‘女’ then select ‘女生’;
end case;
end$
deliemiter ;
call proc5()
select id,name,age,
(case gender
when ‘男’ then ‘男生’
when ‘女’ then ‘女生’
end)性别
from student;
#标准语法2
/*
CASE
WHEN 判断条件1 THEN 执行sql语句1;
[WHEN 判断条件2 THEN 执行sql语句2;]
…
[ELSE 执行sql语句n;]
END CASE; */
/*
输入总成绩变量,代表学生总成绩
定义一个varchar变量,用于存储分数描述
根据总成绩判断:
380分及以上 学习优秀
320 ~ 380 学习不错
320以下 学习一般
*/
delimiter $
create procedure pro_test7(in total int)
begin
declare description varchar(10);
case
when total >= 380 then
set description=‘学习优秀’;
when total >= 320 and total < 380 then
set description = ‘学习不错’;
else
set description = ‘学习一般’;
end case;
select description;
end$
delimiter ;
call pro_test7(100);
call pro_test7((select SUM(score) from student));
#while循环
/*
初始化语句;
WHILE 条件判断语句 DO
循环体语句;
条件控制语句;
END WHILE; */
/*
计算1~100之间的偶数和
*/
delimiter $
create procedure pro_test8()
begin
declare result int default 0;
declare num int default 0;
while num <= 100 do
if num % 2 = 0 then
set result = result + num;
end if;
set num = num +1;
end while;
select result;
end$
delimiter ;
call pro_test8();
#repeat循环
/*
初始化语句;
REPEAT
循环体语句;
条件控制语句;
UNTIL 条件判断语句
END REPEAT;/
– 注意:repeat循环是条件满足则停止。while循环是条件满足则执行
/
计算1~10之间的和
*/
delimiter $
create procedure pro_test9()
begin
declare result int default 0;
declare num int default 1;
repeat
set result = result + num;
set num = num + 1;
until num > 10
end repeat;
select result;
end $
delimiter ;
call pro_test9();
#loop循环
/*
初始化语句;
[循环名称:] LOOP
条件判断语句
[LEAVE 循环名称;]
循环体语句;
条件控制语句;
END LOOP 循环名称; /
– 注意:loop可以实现简单的循环,但是退出循环需要使用其他的语句来定义。我们可以使用leave语句完成!
– 如果不加退出循环的语句,那么就变成了死循环。
/
计算1~10之间的和
*/
delimiter $
create procedure pro_test10()
begin
declare result int default 0;
declare num int default 1;
abc:loop
if num > 10 then
leave abc;
end if;
set result = result + num;
set num = num + 1;
end loop abc;
select result;
end$
delimiter ;
call pro_test10();
标签:语句,存储,set,end,pro,语法,delimiter,MySql,select 来源: https://blog.csdn.net/qingshui9/article/details/122708047