Mysql的高阶语句——数据库函数和存储过程
Posted 28线不知名云架构师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql的高阶语句——数据库函数和存储过程相关的知识,希望对你有一定的参考价值。
一、数据库函数
1.1 数学函数
实例:
#Abs(x)返回绝对值
mysql> select abs(-3),(3.23),(0);
+---------+------+---+
| abs(-3) | 3.23 | 0 |
+---------+------+---+
| 3 | 3.23 | 0 |
+---------+------+---+
1 row in set (0.00 sec)
#Rand() 返回 0 到 1 的随机数
mysql> select rand();
+--------------------+
| rand() |
+--------------------+
| 0.5349133028973949 |
+--------------------+
1 row in set (0.01 sec)
#mod (x,y) 取余
mysql> select mod(5,2);
+----------+
| mod(5,2) |
+----------+
| 1 |
+----------+
1 row in set (0.00 sec)
#power(x,y)( 基数,指数) 返回 x 的 y 次方
mysql> select power(3,2);
+------------+
| power(3,2) |
+------------+
| 9 |
+------------+
1 row in set (0.00 sec)
#round (x,y) 保留x 的y 位小数四舍五入后的值
mysql> select round(4.356,2); '保留两位 四舍五入看第三位'
+----------------+
| round(4.356,2) |
+----------------+
| 4.36 |
+----------------+
1 row in set (0.00 sec)
#Sqrt(x) 返回x 的平方根
mysql> select sqrt(4);
+---------+
| sqrt(4) |
+---------+
| 2 |
+---------+
1 row in set (0.00 sec)
#Truncate(x,y)返回数字x截断为y位小数的值,但truncate函数不会四舍五入
mysql> select truncate(1.896,2);
+-------------------+
| truncate(1.896,2) |
+-------------------+
| 1.89 |
+-------------------+
1 row in set (0.00 sec)
#取整 Ceil(x) 返回大于或等于x的最小整数
#Ceil(x)返回大于或等于x的最小整数
#Ceil 向上取整
mysql> select ceil(1.4);
+-----------+
| ceil(1.4) |
+-----------+
| 2 |
+-----------+
1 row in set (0.00 sec)
#Floor(x)返回小于或等于x的最小整数
#Floor 向下取整
mysql> select floor(1.09);
+-------------+
| floor(1.09) |
+-------------+
| 1 |
+-------------+
1 row in set (0.00 sec)
#返回集合中取最大值 greatest()
mysql> select greatest (10,20,30);
+---------------------+
| greatest (10,20,30) |
+---------------------+
| 30 |
+---------------------+
1 row in set (0.00 sec)
#返回集合中取最小值least()
mysql> select least(10,20,30);
+-----------------+
| least(10,20,30) |
+-----------------+
| 10 |
+-----------------+
1 row in set (0.00 sec)
1.2聚合函数
可以对数据库内的记录求和、平均值、最大值、最小值的操作
常用的聚合函数如表所示
实例:
mysql> select *from f1;
+------+------+--------+----------+--------+------+
| id | name | score | address | hobbid | age |
+------+------+--------+----------+--------+------+
| 1 | a | 95.00 | nanjing | 1 | NULL |
| 6 | c | 10.00 | wuxi | 3 | 100 |
| 3 | d | 70.00 | shanghai | 3 | NULL |
| 4 | e | 100.00 | xuzhou | 5 | NULL |
| 2 | h | 90.00 | shanghai | 2 | NULL |
| 5 | w | 98.00 | xuzhou | 4 | NULL |
+------+------+--------+----------+--------+------+
6 rows in set (0.00 sec)
#返回指定列的平均值
mysql> select avg(score) from f1;
+------------+
| avg(score) |
+------------+
| 77.166667 |
+------------+
1 row in set (0.00 sec)
#返回指定列中非NULL值的个数
mysql> select count(age) from f1;
+------------+
| count(age) |
+------------+
| 1 |
+------------+
1 row in set (0.00 sec)
#返回指定列的最小值和最大值
mysql> select min(score),max(score) from f1;
+------------+------------+
| min(score) | max(score) |
+------------+------------+
| 10.00 | 100.00 |
+------------+------------+
1 row in set (0.00 sec)
#返回指定列的所有值之和
mysql> select sum(score) from f1;
+------------+
| sum(score) |
+------------+
| 463.00 |
+------------+
1 row in set (0.01 sec)
1.3 字符串函数
常用的字符串函数如表所示
实例:
#统计字符串的长度,空格也算 lengh
mysql> select length('ab c');
+----------------+
| length('ab c') |
+----------------+
| 4 |
+----------------+
1 row in set (0.00 sec)
# 返回去除指定格式的值
mysql> select trim(' aaa');
+------------------+
| trim(' aaa') |
+------------------+
| aaa |
+------------------+
1 row in set (0.00 sec)
mysql> select ' aaa';
+----------+
| aaa |
+----------+
| aaa |
+----------+
1 row in set (0.00 sec)
#将字符串 x 和 y 拼接成一个字符串
mysql> select concat('abc','def');
+---------------------+
| concat('abc','def') |
+---------------------+
| abcdef |
+---------------------+
1 row in set (0.01 sec)
#将字符串 x 的所有字母变成大写或小写
mysql> select upper('abc');
+--------------+
| upper('abc') |
+--------------+
| ABC |
+--------------+
1 row in set (0.00 sec)
#返回字符串 x 的前 y 个字符 或 后 y 个字符
mysql> select left('abcdefg',3);
+-------------------+
| left('abcdefg',3) |
+-------------------+
| abc |
+-------------------+
1 row in set (0.00 sec)
mysql> select right('abcdefg',3);
+--------------------+
| right('abcdefg',3) |
+--------------------+
| efg |
+--------------------+
1 row in set (0.00 sec)
#将字符串 x 重复 y 次
mysql> select repeat('abc',2);
+-----------------+
| repeat('abc',2) |
+-----------------+
| abcabc |
+-----------------+
1 row in set (0.00 sec)
#将字符串 z 代替字符串 x 中的字符串 y
mysql> select replace('hello','ll','aa');
+----------------------------+
| replace('hello','ll','aa') |
+----------------------------+
| heaao |
+----------------------------+
1 row in set (0.00 sec)
#获取从字符串 x 中的第 y 个位置开始长度为 z 的字符串
mysql> select substring('abcdefg',3,4);
+--------------------------+
| substring('abcdefg',3,4) |
+--------------------------+
| cdef |
+--------------------------+
1 row in set (0.00 sec)
#将字符反转
mysql> select reverse('gfedcba');
+--------------------+
| reverse('gfedcba') |
+--------------------+
| abcdefg |
+--------------------+
1 row in set (0.00 sec)
#返回字符串的前3个字符,然后反转输出
mysql> select reverse(left('gfedcba',3));
+----------------------------+
| reverse(left('gfedcba',3)) |
+----------------------------+
| efg |
+----------------------------+
1 row in set (0.00 sec)
1.4 日期时间函数
实例:
#返回当前时间
mysql> select curtime();
#返回当前完整时间
mysql> select now();
#返回当前日期是一年中的第几周
mysql> select week('2021-08-25');
# 返回该日期在周,月,年的第几位
mysql> select now(),dayofweek(now()),dayofmonth(now()),dayofyear(now());
二、存储过程
2.1 概述
一组为了完成指定功能的sql语句的集合,将这些sql语句集合存储到一个指定的名称,使用时再进行调用;在执行时比传统的sql速度更快、执行速度更快
实例:
mysql> delimiter @@ ##修改结束符为@@
mysql> create procedure u() ##创建存储过程,过程名为u,不带参数
-> begin ##过程提以关键字begin开始
-> select * from qq; ##过程体语句
-> end @@ ##过程体以关键字end结束
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ; ##将语句的结束符号恢复为分号
mysql> call u(); ##调用存储过程
+------+-------+
| id | score |
+------+-------+
| 1 | 100 |
| 2 | 88 |
| 3 | 89 |
+------+-------+
3 rows in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
show create procedure u\\G ##查看存储过程
show procedure status like 'u'\\G ##查看指定存储过程;u不带%时就查找u一个,带上%会查找所有有u的内容
2.2、存储过程的参数
2.3删除存储过程
存储过程内容的修改方法是:删除原有存储过程,再创建相同的名称的存储。
DROP PROCEDURE IF EXISTS Proc;
实例:
drop procedure if exists u;
以上是关于Mysql的高阶语句——数据库函数和存储过程的主要内容,如果未能解决你的问题,请参考以下文章
瞧这里,没有比这更全的!mysql高阶语句介绍汇总!(查询正则表达式运算符连接查询函数存储过程)
MySQL———高阶语句(包括排列中位数累加百分比正则存储过程等)