MySQL高级SQL语句 --数据库函数和存储过程

数据库函数

●MySQL提供了实现各种功能的函数

●常用的函数分类

  • 数学函数
  • 聚合函数
  • 字符串函数
  • 日期时间函数

数学函数

常用的数学函数:
abc(x):返回的是绝对值
示例:返回-1和-3.14的绝对值

mysql> select abs(-1),abs(-3.14); 

在这里插入图片描述
rand()返回0到1的随机数;注意:取值范围是0<=x<1;是取不到1的
示例:取平均值

mysql> select rand(); 

在这里插入图片描述
mod(x,y) 返回x除以y以后的余数
示例:返回14除以5的余数;返回的是4

mysql> select mod(14,5);

在这里插入图片描述
power(x,y)返回x的y次方
示例:返回8的2次方

mysql> select power(8,2);

在这里插入图片描述
Round(x)返回离x最近的整数
只看小数点后面的第一位;去四舍五入
示例:返回离5.49最近的整数;因为0.49不足5,不满足四舍五入;所以返回的值是5

mysql> select round(5.49);

在这里插入图片描述
示例:返回离5.50最近的整数,因为0.50满足四舍五入;所以返回的值是6

mysql> select round(5.50);

在这里插入图片描述
还有一种结合“,”去使用;保留
示例:5.49保留一位,就是5.4是整值去看0.9是否满足四舍五入
保留一位,只看4后面的数字去比较四舍五入

mysql> select round(5.49,1);

在这里插入图片描述
sqrt:返回x的平方根
示例:返回81的平方根;是9

mysql> select sqrt(81);

在这里插入图片描述
truncate(x,y):返回数字x截断为y位小数的值
示例:返回3.1415926截取小数点后三位,将值显示出来

mysql> select truncate(3.1415926,3);

在这里插入图片描述
ceil(x):返回大于或等于x的最小整数;向上取整数,只要超过1就会取到2
示例:返回大于或等于2.5的值

mysql> select ceil(2.5);

在这里插入图片描述
floor(x)返回小于或等于x的最大整数,向下取整数,会把小数点后面的直接抹掉
示例:返回小于或等于1.99的最大整数

mysql> select floor(1.99);

在这里插入图片描述
Greatest(x1,x2…):返回集合中的最大值
least(x1,x2…):返回集合中的最小值

示例:返回(10,20,30)中的最小值和最大值

mysql> select greatest(10,20,30),least(10,20,30);

在这里插入图片描述

聚合函数

对表中数据记录进行集中概括而设计的一类函数
常用的聚合函数:

avg()返回指定列的平均值
示例:返回分数的平均值

mysql> select avg(score) from cai;

在这里插入图片描述
count()返回指定列中非null值的个数
示例:返回分数列的个数

mysql> select count(score) from cai;

在这里插入图片描述
min():返回指定列的最小值
示例:返回分数列的最小值

mysql> select min(score) from cai;

在这里插入图片描述
max:返回指定列的最大值
示例:返回分数列的最大值

mysql> select max(score) from cai;

在这里插入图片描述

字符串函数

常用的字符串函数:
字符串函数:

Length(x)返回字符串x的长度
示例:

mysql> select length('caidadsada');
mysql> select length('cai  d  adsada');    ##空格符号也算长度的 

在这里插入图片描述

trim()返回去除指定格式的值;只能去除前后两端空格,中间的空格是无法去除的
示例:

mysql> select trim(' chenggu ');
mysql> select trim(' cheng gu ');       ##中间的空格是无法去除的

在这里插入图片描述
concat(x,y):将提供的参数x和y拼接成一个字符串
示例:

mysql> select concat('cheng',' gu');

在这里插入图片描述
字符串之间可以做函数内嵌

mysql> select concat('cheng',trim(' gu'));

在这里插入图片描述
upper(x)将字母转换为大写;lower将字母转换为小写
示例:

mysql> select upper('abc'),lower('ABCc');

在这里插入图片描述
left(x,y):返回字符串x的前y个字符
示例:显示字符串abcsdada的前4位

mysql> select left('abcsdada',4);

在这里插入图片描述
right(x,y):返回字符串x的后y个字符
示例:

mysql> select right('andasda',5);     ##显示字符串的后五位

在这里插入图片描述
可以结合使用;比如:将s去掉其他的显示出来

mysql> select concat(left('andasda',4),right('andasda',2));

在这里插入图片描述
Repeat(x,y)将字符串x重复y次
示例:将abc重复2次

mysql> select repeat('abc',2);

在这里插入图片描述
Space(x)返回x个空格;一般和连接搭配使用

mysql> select concat('a',space('3'),'b');

在这里插入图片描述
Replace(x,y,z)替换:将字符串z替代字符串x中的字符串y
示例:将hello中的el替换为test

mysql> select replace('hello','el','test');

在这里插入图片描述
Strcmp(x,y)比较xy;返回的值为-1,0,1
x<y返回-1;
x=y 返回0
x>y 返回1
注意只能一位数和一位数去比较
示例:比较5和8;不是拿57和8进行比较;所以返回的是-1

mysql> select strcmp(57,8);

在这里插入图片描述
再比如:比较5和4,5是大于4的所以返回的是1

mysql> select strcmp(57,4);

在这里插入图片描述
Substring(x,y,z)获取从字符串x中的第y个位置开始长度为z的字符串
语法:substring(完整字符串,起始位置,长度)
示例:获取从字符串abcdefg中第3个位置开始长度为4的字符串

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

在这里插入图片描述
Reverse(x) :将字符串x反转
示例:将hello字符串反转

mysql> select reverse ('hello');

在这里插入图片描述
可以嵌套使用;比如将字符串反过来做大写输出

mysql> select upper(reverse ('hello'));

在这里插入图片描述

日期时间函数

常用的日期函数
curdate()返回当前时间的年月日

mysql> select curdate();       ##返回当前时间

在这里插入图片描述
curtime()返回当前时间的分时秒

mysql> select curtime();

在这里插入图片描述
now()返回当前时间的日期时间,一起显示

mysql> select now();

在这里插入图片描述
mouth()返回日期中的月份值;返回的是8月份

mysql> select month('2020-08-25'); 

在这里插入图片描述
week()返回日期是年度的第几个星期

mysql> select week('2020-08-25');

在这里插入图片描述
返回小时值

mysql> select hour('16:16:09');

在这里插入图片描述
时间函数这边也是可以搭配使用的
返回当前的小时值

mysql> select hour(curtime());

在这里插入图片描述
minute()返回分钟值

mysql> select minute(curtime());

在这里插入图片描述
sencond()返回秒值

mysql> select second(curtime());

在这里插入图片描述
返回是星期几;1是周日;2是周一;3是周二
dayofweek()

mysql> select dayofweek(curdate());

在这里插入图片描述
计算日期是本周的第几天

dayofmonth()
mysql> select dayofmonth(curdate());

在这里插入图片描述
计算日期是本年的第几天
Dayofyear()

mysql> select dayofyear(curdate());

在这里插入图片描述

存储过程

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

●存储过程在数据库中创建并保存,它不仅仅是 SQL 语句的集合,还可以加入一些特殊的控制结构,也可以控制数据的访问方式。存储过程的应用范围很广,例如封装特定的功能、 在不同的应用程序或平台上执行相同的函数等等。

存储过程的优点

  • 存储过程执行一次后,生成的二进制代码就驻留在缓冲区,之后如果再次调用的话,将 直接调用二进制代码,使得存储过程的执行效率和性能得到大幅提升。

  • 存储过程是 SQL 语句加上控制语句的集合,有很强的灵活性,可以完成复杂的运算。

  • 存储过程存储在服务器端,客户端调用时,直接在服务器端执行,客户端只是传输的调用语句,从而可以降低网络负载。

  • 存储过程被创建后,可以多次重复调用,它将多条 SQL 封装到了一起,可随时针对 SQL

  • 语句进行修改,不影响调用它的客户端。
    存储过程可以完成所有的数据库操作,也可以通过编程的方式控制数据库的信息访问权限。

参数分为

  • 输入参数:IN
  • 输出参数:OUT
  • 输入输出参数:INOUT

存储过程的示例

示例:调用存储过程,用于查看cai表中的name和score字段
1.配置存储过程的

mysql> delimiter $$    ##开头声明
mysql> create procedure MyRole()      ##创建存储过程名;定义规则
    -> begin                     ##开始
    -> select name,score from cai;     ##定义SQL语句
    -> end$$                     ##结束
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;                 ##退出;注意需要加空格

2.查看创建的存储过程

mysql> show procedure status where db='cai';     因为是cai数据库,不然东西太多

在这里插入图片描述
3.调用存储过程

mysql> call MyRole();  

在这里插入图片描述
示例二:传入参数的用法
1.查看指定用户的信息

mysql> delimiter $$
mysql> create procedure Test(in my_name varchar(10))
    -> begin
    -> select name,score from cai where name=my_name;
    -> end$$
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

2.调用存储过程

mysql> call Test('zhangsan');     ##后面加入参数

在这里插入图片描述
示例三:将zhangsan进行修改成绩,并分组;如果成绩在80分向上就分到1组;成绩在80分下面就分到第2组
在这里插入图片描述
1.配置存储过程的脚本

mysql> delimiter $$
mysql> create procedure Myname(in my_score decimal(5,2))  ##定义参数和规则
    -> begin
    -> declare hob int(3);     ##定义变量hob;整型
    -> if my_score >=80 then      ##做if条件判断;如果输入分数大于80
    -> set hob = 1;                  ##就会被分到1-> else 
    -> set hob = 2;                  ##否则就会被分到2-> end if;
    -> update cai set score=my_score,hobby=hob where name='zhangsan';
    -> end$$
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

2.调用存储过程

mysql> call Myname(85);       ##将zhangsan的分数改为85;查看分组情况

在这里插入图片描述

mysql> call Myname(79);      ##将分数改为79;查看分组情况

在这里插入图片描述
查询存储过程:

show procedure status where db=’数据库’;
mysql> show procedure status where db='cai';  查询数据库cai的存储过程

删除存储过程:

drop procedure 存储过程名;
mysql> drop procedure Myname;       ##删除存储过程Myname

修改存储过程:

Alter procedure  <过程名> [ <特征>]

猜你喜欢

转载自blog.csdn.net/Cpureman/article/details/108237191