4.Mysql:MySQL函数

4.Mysql:MySQL函数

官方文档 : https://dev.mysql.com/doc/refman/5.7/en/func-op-summary-ref.html

常用函数

分类: 数学函数 , 字符串函数 , 日期和时间函数 , 系统信息函数

# 数学函数 (这里只列出一些常用的)

SELECT ABS(-8);  /*绝对值*/
-- absolute value
SELECT CEILING(9.4);  /*向上取整*/   
-- 天花板 上限 上升限度
SELECT FLOOR(9.4);  /*向下取整*/
-- 地板 楼层 自由体操
SELECT RAND();  /*随机数,返回一个0-1之间的随机数*/
-- 产生均匀分布随机数
SELECT SIGN(0); /*符号函数: 负数返回-1,正数返回1,0返回0*/
-- 符号
SELECT SIGN(-4); 
SELECT SIGN(8); 

#字符串函数

SELECT CHAR_LENGTH('新思路团队都是大佬'); /*返回字符串包含的字符数*/

SELECT CONCAT('我','相信','自己');  /*合并字符串,参数可以有多个*/

SELECT INSERT('我想进新思路',2,1,'一定努力');  /*替换字符串,从某个位置开始替换某个长度*/

SELECT LOWER('WANWAN'); /*小写*/

SELECT UPPER('wanwan'); /*大写*/

SELECT LEFT('hello,world',5);  /*从左边截取*/

SELECT RIGHT('hello,world',5);  /*从右边截取*/

SELECT REPLACE('在新思路能学习到很多东西','很多东西','新知识');  /*替换字符串*/

SELECT SUBSTR('新思路是一个很棒的团队',4,8); /*截取字符串,开始和长度*/

SELECT REVERSE('Java EE'); /*反转,逆向*/


#日期和时间函数

SELECT CURRENT_DATE();   /*获取当前日期*/
SELECT CURDATE();   /*获取当前日期*/

SELECT NOW();   /*获取当前日期和时间*/
SELECT LOCALTIME();   /*获取当前日期和时间*/
SELECT SYSDATE();   /*获取当前日期和时间*/

/*获取年月日,时分秒*/
SELECT YEAR(NOW());
SELECT MONTH(NOW());
SELECT DAY(NOW());
SELECT HOUR(NOW());
SELECT MINUTE(NOW());
SELECT SECOND(NOW());


#系统信息函数
SELECT VERSION();  /*版本*/
SELECT USER();  /*用户*/


# 查询姓李的同学,改成立
SELECT REPLACE(studentname,'李','立') AS 新名字
FROM student WHERE studentname LIKE '李%';

聚合函数

函数名称 描述
count() 计数
sum() 求和
vag() 求平均值
max() 求最大值
min() 求最小值
#聚合函数

/*COUNT:非空的*/
SELECT COUNT(studentname) FROM student;
-- 返回记录的总数
SELECT COUNT(*) FROM student;
-- 效率低,不建议使用
SELECT COUNT(1) FROM student; 
-- 推荐
SELECT SUM(StudentResult) AS 总和 FROM result;
-- 求一列的总和
SELECT AVG(StudentResult) AS 平均分 FROM result;
-- 求一列的平均分
SELECT MAX(StudentResult) AS 最高分 FROM result;
-- 求一列的最高分
SELECT MIN(StudentResult) AS 最低分 FROM result;
-- 求一列的最低分

# 查询不同课程的平均分,最高分,最低分
# 前提:根据不同的课程进行分组

SELECT subjectname,AVG(studentresult) AS 平均分,MAX(StudentResult) AS 最高分,MIN(StudentResult) AS 最低分
FROM result AS r
INNER JOIN `subject` AS s
ON r.subjectno = s.subjectno
GROUP BY r.subjectno
HAVING 平均分>80;

/*
where写在group by前面.
要是放在分组后面的筛选
要使用HAVING..
*/

count分析

执行效果:
1.  count(1) and count(*)
当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了! 
从执行计划来看,count(1)count(*)的效果是一样的。 但是在表做过分析之后,count(1)会比count(*)的用时少些(1w以内数据量),不过差不了多少。 
 
如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。 
因为count(*),自动会优化指定到那一个字段。所以没必要去count(1),用count(*)sql会帮你完成优化的 因此:count(1)count(*)基本没有差别! 
 
2. count(1) and count(字段)
两者的主要区别是
(1count(1) 会统计表中的所有的记录数,包含字段为null 的记录。
(2count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。 

count(*)count(1)count(列名)区别  
执行效果上:  
count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL  
count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL  
count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。
执行效率上:  
列名为主键,count(列名)会比count(1)快  
列名不为主键,count(1)会比count(列名)快  
如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)  
如果有主键,则 select count(主键)的执行效率是最优的  
如果表只有一个字段,则 select count(*)最优。

MD5 加密

在这里插入图片描述

mysql之自定义函数

(注明:我未深入学习,感兴趣的同学自行了解学习)

什么是函数:

函数存储着一系列SQL语句,调用函数就是一次性执行这些语句。所以函数可以降低语句重复。
但注意的是函数注重返回值,不注重执行过程,所以一些语句无法执行。所以函数并不是单纯的SQL语句集合。

函数与存储过程的区别:函数只会返回一个值,不允许返回一个结果集。函数强调返回值,所以函数不允许返回多个值的情况,即使是查询语句。

发布了52 篇原创文章 · 获赞 10 · 访问量 3713

猜你喜欢

转载自blog.csdn.net/weixin_46047285/article/details/104702187