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------高阶SQL语句二

MySQL———高阶语句(包括排列中位数累加百分比正则存储过程等)

MySQL———高阶语句(包括排列中位数累加百分比正则存储过程等)

MySQL高阶语句

MySQL基础--存储过程和函数