高阶SQL3(数据库,数学,聚合,字符串,时间,储蓄过程)

数据库函数

MySQL 数据库函数提供了能够实现各种功能的方法,使我们在查询记录时能够更高效的输出

MySQL内建了很多很多函数,常用的包括数学函数、聚合函数、字符串函数和日期时间函数

数学函数

数据库内存储的记录,经常要进行一系列的算术操作,所以 MySQL 支持很多数学函数。

常用的数学函数有

abs(x)返回 x 的绝对值
rand()返回 0 到 1 的随机数
mod(x,y)返回 x 除以 y 以后的余数
power(x,y)返回 x 的 y 次方
round(x)返回离 x 最近的整数
round(x,y)保留 x 的 y 位小数四舍五入后的值
sqrt(x)返回 x 的平方根
truncate(x,y)返回数字 x 截断为 y 位小数的值
ceil(x)返回大于或等于 x 的最小整数
floor(x)返回小于或等于 x 的最大整数
greatest(x1,x2…)返回集合中最大的值
least(x1,x2…)返回集合中最小的值
select abs(-1),rand(),mod(5,3),power(2,3),round (1.579),round(1.734,2);

在这里插入图片描述

select sqrt(9),truncate(1.234,2),ceil(1.2),floor(1.9),greatest(1,2,3,4),least(1,2,3,4);

在这里插入图片描述

聚合函数

MySQL数据库函数中专门有一组函数是特意为库内记录求和或者对表中概括而设计的,这些函数被称作聚合函数

聚合函数描述
avg()返回指定列的平均值
count()返回指定列中非 NULL 值的个数
min()返回指定列的最小值
max()返回指定列的最大值
sum(x)返回指定列的所有值之和
select avg(a_level),count(a_level)from test1;
select min(a_level),max(a_level),sum(a_level)from test1;

在这里插入图片描述

字符串函数trim() 返回去除指定格式的值

字符串函数描述
length(x)返回字符串 x 的长度
trim()返回去除指定格式的值
concat(x,y)将提供的参数 x 和 y 拼接成一个字符串
upper(x)将字符串 x 的所有字母变成大写字母
lower(x)将字符串 x 的所有字母变成小写字母
left(x,y)返回字符串 x 的前 y 个字符
right(x,y)返回字符串 x 的后 y 个字符
repeat(x,y)将字符串 x 重复 y 次
space(x)返回 x 个空格
replace(x,y,z)将字符串 z 替代字符串 x 中的字符串 y
strcmp(x,y)比较 x 和 y,返回的值可以为-1,0,1
substring()获取从字符串 x 中的第 y 个位置开始的字符串,跟substr(x,y) 函数作用相同
substr(x,y,z)获取从字符串 x 中的第 y 个位置开始长度为 z 的字符串
reverse(x)将字符串 x 反转

length 返回字符的长度,空格也算一个字符

select length ('abcd'),length ('ab cd');

在这里插入图片描述

trim 去掉格式只输出字符串

select trim ('   abc'),'   abc';

在这里插入图片描述

concat 将字符串拼接成一个字符串

select concat('abc','def'),concat('abc',' def');

在这里插入图片描述

upper 转换成大写字母

lower 转换成小写字母

select upper('abcDEF'),lower('abcDEF');

在这里插入图片描述

left 返回字符串的前3个字母

right 返回字符串的后3个字母

select left('abcdefg',3),right('abcdefg',3);

在这里插入图片描述

repeat 重复字符串2次

select repeat('abc',2),repeat('ab ',3);

在这里插入图片描述

space 返回空格

select space(3),length(space(2));

在这里插入图片描述

replace 替换

select replace('hello','ll','bb');

strcmp 比较17和18,小于返回-1,大于返回1,等于返回0

select strcmp(17,18);

substring 返回从字符串中第三个字符开始的4个字符

select substring('abcdefg',3,4);

在这里插入图片描述

reverse 字符反转显示

select reverse('gfedcba');

在这里插入图片描述

日期时间函数

字符串函数描述
curdate ()返回当前时间的年月日
curtime ()返回当前时间的时分秒
now ()返回当前时间的日期和时间
month (x)返回日期x中的月份值
week (x)返回日期x是年度第几个星期
hour (x)返回x中的小时值
minute (x)返回x中的分钟值
second (x)返回x中的秒钟值
dayofweek(X)返回x是星期儿,1星期日,2星期–
replace (x, y,z)将字符串z替代字符串x中的字符串y
dayofmonth(x)计算日期x是本月的第几天
dayofyear (x)计算日期x是本年的第几天
select curdate();   返回年月日
select curtime();   返回当前时间
select now();       返回当前时间的日期和时间
select month(x)	    返回日期x中的月份值
select week(x)	    返回日期x是年度第几个星期
select hour(x)	    返回x中的小时值
select minute(x)	返回x中的分钟值
select second(x)	返回x中的秒钟值
select dayofweek(X)	返回x是星期儿,1星期日,2星期–
select replace(x, y,z)	将字符串z替代字符串x中的字符串y
select dayofmonth(x)	计算日期x是本月的第几天
select dayofyear(x)	    计算日期x是本年的第几天

储蓄过程

概述

前面学习的MySQL相关知识都是针对一个表或几个表的单条SQL. 语句,使用这样的SQL语句虽然可以完成用户的需求,但在实际的数据库应用中,有些数据库操作可能会非常复杂,可能会需要多条SQL语句一-起去处理才能够完成,这时候就可以使用存储过程,轻松而高效的去完成这个需求,有点类似she1l脚本里的函数

简介

MySQL数据库存储过程是一组为了完成特定功能的SQL语句的集合。存储过程这个功能是从5.0版本才开始支持的,它可以加快数据库的处理速度,增强数据库在实际应用中的灵活性。存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。操作数据库的传统SQL语句在执行时需要先编译,然后再去执行,跟存储过程一对比, 明显存储过程在执行上速度更快,效率更高。存储过程在数据库中创建并保存,它不仅仅是SQL语句的集合,还可以加入一些特殊的控制结构,也可以控制数据的访间方式。

优点

存储过程的优点
1、执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
2、SQL语句加上控制语句的集合,灵活性高
3、在服务器端存储,客户端调用时,降低网络负载
4、可多次重复被调用,可随时修改,不影响客户端调用
5、可完成所有的数据库操作,也可控制数据库的信息访问权限

创建存储过程

使用CREATE PROCEDURE 语句创建存储过程
(与Shel1函数差不多,代码的复用)

不带参数的创建

语法

create procedure <过程名> ([过程参数...])<过程体>
[过程参数...] 格式
<过程名>:尽量避免与内置的函数或字段重名
<过程体>:语句

示例

delimiter $$                       定义结束符
create procedure cc()           创建存储过程(过程名)
begin       开启存储过程
create table chen (id int(10),name char(10),score int(10));
insert into chen values (1,'zhao',13);
select * from chen;   过程体
end $$    结束存储过程


delimiter ;  结束符恢复成;
call chen    执行

在这里插入图片描述

参数

Ⅰ存储过程的主体部分,被称为过程体
Ⅱ 以begin开始,以end结束,若只有一条SQL语句,则可以省略begin-end
Ⅲ 以delimiter 开始和结束

带参数的存储过程

输入参数:IN 表示调用者向过程传入值
输出参数:OUT 表示过程向调用者传出值
输出/输出参数:INOUT 即表示调用者向过程传入值,又表示过程向调用者传出值

delimiter $$
create procedure getrole(in inname varchar(16))
begin
select a_id,a_name,a_level from test1 where a_name=inname;
end $$

delimiter ;
call getrole;

其他命令

查看存储过程

show procedure status;

show create procedure;

修改存储过程

alter procedure <过程名> [ <特征>...]

alter procedure getrole modifies sql data sql security invoker;

modifies sql data:表明子程序包含写数据的语句
security:安全等级
invoker:当定义成这样时,只要执行者有执行权限,就可以成功执行

删除存储过程

drop procedure if exists getrole;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值