「MySQL 基础」存储过程、函数 小练习

131 阅读3分钟

前言:下面是一些使用存储过程和函数的练手小题目

🙏废话不多说系列,直接开整🙏

一、累计求和:输入n,求1+2+3+…+n的和

1、使用函数
(1)源码
# 如果存在函数 sumNum ,则删除
drop function if exists sumNum;

create function sumNum(`num` int) returns int
begin
	# 存储函数:累计求和(例如:输入参数为 3,则返回6 [1+2+3=6])
	declare sum int;
	declare i int;
	set sum = 0;
	set i = 1;
	while i <= num DO
		set sum = sum + i;
		set i = i + 1;
	end while;
	return sum;
end

# 演示示例
select sumNum(3);
(2)测试

image.png

2、使用存储过程
(1)源码
# 如果存在存储过程 proc_sumNum(), 则删除
drop procedure if exists proc_sumNum;

create procedure proc_sumNum(in num int)
begin
	# 声明变量,要紧跟begin之后
	declare sum int;
	declare i int;
	# 赋值用 set
	set i = 1;
	set sum = 0;
	while i <= num do
		set sum = sum + i;
		set i = i + 1;
	end while;
	# 显示sum
	select sum;
end

# 使用示例
call proc_sumNum(3);

image.png

二、猜数字,输入一个数字,看看是否和随机的一致

1、使用函数
(1)源码
-- 如果存在此函数,则删除
drop function if exists isAim;

create function isAim(`num` int) returns varchar(1000)
begin
	declare s varchar(1000);
	declare aim int;
	set aim = floor(rand() * 6 + 7); # 随机生成的7~12以内包含712的数字
	set s = '';
	if num < aim then set s = 'less';
	elseif num > aim then set s = 'more';
	else set s = 'Successfull!,You are Greatful!';
	end if;
	return s;
end

-- 使用示例
select isAim(8);
(2)测试

image.png

三、拼接函数-使用

(1)group_concat()

核心语法格式:group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

-- 用法1[组拼接]:
-- 当 group_concat(字段列1) 配合 group by 字段2 使用时,根据 字段2 分类去统计拼接;
-- 当 group_concat(字段列1) 单独使用在 select 语句中时,将字段列1 所有的值 拼接;
select group_concat(user_id) from user; -- 得到所有ID用“,”拼接的字符串;
select group_concat(user_id) from user group by user_gender; -- 根据性别分类得到ID用“,”拼接的字符串;

-- 用法2[拼接符]:默认使用“,”拼接,可自定义拼接字符"-"
select group_concat(user_id separator '-') from user;

-- 用法3[升降序]:拼接字符串时进行排序,默认按照时间升序拼接
select group_concat(user_id order by create_time desc) from user;

-- 用法4[去重复]:拼接的字符串时去重需拼接的字段值
select group_concat(distinct user_name) from user;

-- 综合,上述用法举例
select group_concat(distinct user_id order by create_time desc separator '-') from user;
(2)concat() 函数
  • 功能:将多个字符串连接成一个字符串。
  • 语法:concat(str1, str2,...)
  • 返回:返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
select concat('-', 2, '-'), concat(1,null,2);

image.png

(3)concat_ws() 函数
  • 功能:和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符~(concat_ws就是concat with separator)
  • 语法:concat_ws(separator, str1, str2, ...)
  • 说明:第一个参数指定分隔符。需要注意的是分隔符不能为null,如果为null,则返回结果为null。
select concat_ws('*', 1,null,3), concat_ws('-', 1,2,3);

image.png

🙏至此,非常感谢阅读🙏