非常实用的MySQL函数全面总结详解示例分析教程

 更新时间:2021年10月28日 00:00  点击:1601 作者:数据分析与统计学之美

1.MySQL中关于函数的说明

"概念":类似java、python中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名;

"好处":Ⅰ隐藏了实现细节;Ⅱ提高代码的重用性;

"调用":select 函数名(实参列表) [from 表];

"特点":Ⅰ叫什么(函数名);Ⅱ干什么(函数功能);

"分类":Ⅰ单行函数;Ⅱ分组函数;

"什么是单行函数:":作用于表中的每一行记录,一条记录出来一个结果;

"什么是聚合函数:":作用于一行或者多行,最终返回一个结果;

2.单行函数分类

字符函数;

数学函数;

日期函数;

其他函数;

流程控制函数;

3.字符函数

1)length(str):获取参数值的字节个数;

对于utf8字符集来说,一个英文占1个字节;一个中文占3个字节;

对于gbk字符集来说,一个英文占1个字节;一个中文占2个字节;

操作如下 :

在这里插入图片描述

2) concat(str1,str2,…):拼接字符串;

操作如下:

在这里插入图片描述

3)upper(str):将字符中的所有字母变为大写;

操作如下:

在这里插入图片描述

4)lower(str) :将字符中所有字母变为小写;

操作如下:

在这里插入图片描述

5)substr(str,start,len):从start位置开始截取字符串,len表示要截取的长度; 没有指定len长度:表示从start开始起,截取到字符串末尾。指定了len长度:表示从start开始起,截取len个长度。

操作如下:

在这里插入图片描述

6)instr(str,要查找的子串) :返回子串第一次出现的索引,如果找不到,返回0; 当查找的子串存在于字符串中:返回该子串在字符串中【第一次】出现的索引。当查找的子串不在字符串中:返回0。

操作如下:

在这里插入图片描述

7)trim(str):去掉字符串前后的空格; 该函数只能去掉字符串前后的空格,不能去掉字符串中间的空格。

操作如下:

在这里插入图片描述

8)lpad(str,len,填充字符):用指定的字符,实现对字符串左填充指定长度;

操作如下:

在这里插入图片描述

9)rpad(str,len,填充字符):用指定的字符,实现对字符串右填充指定长度;

操作如下:

在这里插入图片描述

10) replace(str,子串,另一个字符串):将字符串str中的字串,替换为另一个字符串;

操作如下:

在这里插入图片描述

4.数学函数

1)round(x,[保留的位数]) :四舍五入; 当对正数进行四舍五入:按照正常的计算方式,四舍五入即可。当对负数进行四舍五入:先把符号丢到一边,对去掉负号后的正数进行四舍五入,完成以后,再把这个负号,补上即可。

操作如下:

在这里插入图片描述

2)ceil(x):向上取整,返回>=该参数的最小整数。(天花板函数) 天花板函数,在excel,python中均存在这个函数。你就想象一下你家的天花板,把这个数字丢到天花板上,求的是大于等于这个数字的最小整数。

操作如下:

在这里插入图片描述

3)floor(x):向下取整,返回<=该参数的最大整数。(地板函数) 地板函数:在excel,python中均存在这个函数。你就想象一下你家的地板,把这个数字丢到地板上,求的是小于等于这个数字的最大整数。

操作如下:

在这里插入图片描述

4)truncate(x,D) :截断; truncate函数,也是在excel,python中均存在,含义基本都是一致的。但是这个函数理解起来有点难,我这里带着大家好好学习一下。

理解如下:

"参考下面的示例图,体会如下文字"
1)D是正数,操作的是小数点右侧的小数部分。 
      D=1,直接从第1个位置处,砍掉后面的部分。
      D=2,直接从第2个位置处,砍掉后面的部分。
 ......
  

2)D是0,直接去掉小数部分。

3)D是负数,操作的是小数点左侧的整数部分。
   D=-1,直接从-1位置处,先砍掉后面的小数部分,
   并且"从当前位置起(包括当前位置),后面整数部分替换为0"。
   D=-2,直接从-2位置处,先砍掉后面的小数部分,
   并且"从当前位置起(包括当前位置),后面整数部分替换为0"。

示例图:

在这里插入图片描述

操作如下:

在这里插入图片描述

5)mod(被除数,除数) :取余; 当被除数为正数,结果就是正数。当被除数为负数,结果就是负数。

操作如下:

在这里插入图片描述

5.日期时间函数

日期的含义:指的是我们常说的年、月、日。

时间的含义:指的是我们常说的时、分、秒。

在讲述下面函数之前,我们先补充一个知识,不同时间格式符表示什么含义呢?

在这里插入图片描述

1)now() :返回系统当前的日期和时间;

操作如下:

在这里插入图片描述

2)curdate() :只返回系统当前的日期,不包含时间;

操作如下:

在这里插入图片描述

3)curtime() :只返回系统当前的时间,不包含日期;

操作如下:

在这里插入图片描述

4)获取日期和时间中年、月、日、时、分、秒; 

 获取年份:year();

获取月份:month();

获取日:day();

获取小时:hour();

获取分钟:minute();

获取秒数:second();

5)weekofyear() :获取当前时刻所属的周数;

操作如下:

在这里插入图片描述

6)quarter() :获取当前时刻所属的季度;

操作如下:

在这里插入图片描述

7)str_to_date() :将日期格式的字符串,转换成指定格式的日期;

操作如下:

在这里插入图片描述

8)date_format() :将日期转换成日期字符串; %Y-%m-%d返回的月份是01,02…这样的格式。%Y-%c-%d返回的月份是1,2…这样的格式。

操作如下:

在这里插入图片描述

9)date_add() + interval :向前、向后偏移日期和时间;

在这里插入图片描述

操作如下:

在这里插入图片描述

10)last_day() :提取某个月最后一天的日期;

操作如下:

在这里插入图片描述

11)datediff(end_date,start_date) :计算两个时间相差的天数;

操作如下:

在这里插入图片描述

12)timestampdiff(unit,start_date,end_date) :计算两个时间返回的年/月/天数;

unit参数是确定(start_date,end_date)结果的单位,表示为整数,以下是有效单位:

year:年份

month:月份

day:天

hour:小时

minute 分钟

second:秒

microsecond:微秒

week:周数

quarter:季度

YEAR:年份

操作如下:

在这里插入图片描述

6.其它常用系统函数

在这里插入图片描述

7.流程控制函数

1)if函数:实现if-else的效果;

在这里插入图片描述

2)ifnull函数:判断值是否为null,是null用指定值填充;

在这里插入图片描述

3)case…when函数的三种用法;

case … when共有三种用法,我相信自己的总结会相当全面。希望大家一定要好好研究这几种用法,都是很有用的。

等值判断:类似于java中switch case的效果;

区间判断:类似于python中if-elif-else的效果;

case … when和聚合函数联用;

① case … when用作等值判断的语法格式;

case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1
when 常量2 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end

操作如下:

在这里插入图片描述

② case … when用作区间判断的语法格式;

case
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end

操作如下:

在这里插入图片描述

③ case…when与聚合函数的联用

在这里插入图片描述

利用上述原始表,完成如下问题:

-- 18、查询各科成绩最高分、最低分和平均分,以如下形式显示:
-- 课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率
-- 及格为:>=60,中等为:70-80,优良为:80-90,优秀为:>=90

操作如下:

select sc.c,cname,
max(score) 最高分,min(score) 最低分,avg(score) 平均分,
sum(case when score>60 then 1 else 0 end)/count(*) 及格率,
sum(case when score>=70 and score<80 then 1 else 0 end)/count(*) 中等率,
sum(case when score>=80 and score<90 then 1 else 0 end)/count(*) 优良率,
sum(case when score>=90 then 1 else 0 end)/count(*) 优秀率
from sc left join course 
on sc.c = course.c
group by sc.c;

结果如下:

在这里插入图片描述

8.聚合函数

1)聚合函数的功能和分类;

① 聚合函数的功能;

用作统计使用,又称为聚合函数或统计函数或组函数。

② 聚合函数的分类; sum 求和avg 平均值max 最大值min 最小值count 计算个数

2)聚合函数的简单使用

在这里插入图片描述

3)五个聚合函数中传入的参数,所支持的数据类型有哪些?

mysql不是强类型的编程语言。也就是说,有些语句执行结果可能不报错,但是执行结果无实际意义,因此,我们也认为是不正确的。

① 测试数据;

"建表语句"
create table test(
	id int primary key auto_increment,
	name varchar(20) not null,
	sal int,
	birth date)charset=utf8;

"插入数据"
 insert into test(name,sal,birth) values 
 ("Zoo",6500,'1993.3.20'),
 ("Hobby",4000,'1997.6.10'),
 ("Aline",5500,'2000.5.1'),
 ("Bob",10000,'2008.10.1');

② sum()函数和avg()函数:传入整型/小数类型才有意义;

在这里插入图片描述

结论如下:

sum()函数和avg()函数对于字符串类型、日期/时间类型的计算都没有太大意义。因此,sum()函数和avg()函数,我们只用来对小数类型和整型进行求和。

③ max()函数和min()函数:传入整型/小数类型、日期/时间类型意义较大;

在这里插入图片描述

结论如下:

max()和min()中传入的是"整型/小数类型",计算的是数值的最大值最小值。max()和min()中传入的是"日期类型",max()计算的最大值是离我们最近的那个日期,min()计算的最小值是离我们最远的那个日期,这个可以记一下。max()和min()中传入的是字符串类型,max()计算的最大值是按照英文字母顺序显示的,min()计算的最小值也是按照英文字母顺序显示的,意义不太大。

 ④ count()函数:可以传入任何数据类型,但是碰到null要注意;

在这里插入图片描述

结论如下:

    count()函数可以传入任何数据类型,表示对行计数。
    "但是下面的知识点需要特别注意的"
    首先看看count(sal)count(birth)这两句表示的是什么意思?这两句分别表示的是
对sal列字段、birth列字段的行数,进行统计。由于其中有一条记录是null值,因此使用count()
函数计数的时候,会忽略掉null行。
    其次,对于count(*)表示的是统计【整个表】有多少行,这个肯定是对原始数据的行数的正确
统计,只要整张表某一行有一个列字段的值不是null,count(*)就会认为该行为1行。当然要是一
整行都是null值,你也没必要插入这条记录。

总结:

   当某个字段列中没有null值,则"count(列字段)=count(*)。"
   当某个字段列中有null值,则"count(列字段)<count(*)。"
   因此,假如你想统计的是整张表的行数,请用count(*)。

其实所有的分组函数都忽略null值的,但上面那个count()函数碰到null值要特别注意。

⑤ count()函数碰到null值需要特别注意;

在这里插入图片描述

结论如下:

对于avg(sal)求平均值来说,(6500+4000+5500+10000)/4=6500。

对于后面这个sum()/count(*)求平均值来说,(6500+4000+5500+10000)/5=5200。

好好体会上述例子,有时候某人成绩虽然记录的是null,但是你仍然有5个人存在,所以你要考虑一下怎么使用合适的函数,达到你想要的结果。

⑥ count(1),count(0)表示的是啥意思呢?

    无论是sum(1),sum(0),count(1),count(0),avg(1),avg(0),原理都是一样的,相当于在原表中新增一列。

    其次,我们知道where后面接的是【逻辑值】,当使用where 1和where 0原理也还是一样,也相当于在原表中新增一列。

    我们只需要记住在mysql中:"非0即为true,0为false"。也就是说,下面的所有是1的地方,你可以换成任何非0数字,都是可以的。

原理图如下:

在这里插入图片描述

测试一下:

在这里插入图片描述

⑦ count(*)计数的效率问题;

MYISAM存储引擎下,count(*)的效率高。INNODB存储引擎下,count(*)和count(1)的效率差不多,比count(字段)效率要高一些。综上所述:优先使用count(*)。

4)聚合函数和group by的使用“最重要”;

关于这个知识点,我们将会在后面的知识点中进行讲述。在这里我们只需要记住一句话:当SQL语句中使用了group by分组函数后,select后面的字段必须是group by后面的字段 + 聚合函数的使用。

以上就是非常实用的MySQL函数全面总结详解示例分析的详细内容,更多关于MySQL函数的资料请关注猪先飞其它相关文章!

原文出处:https://huang-tong-xue.blog.csdn.net/article/details/1068231

[!--infotagslink--]

相关文章

  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • MySQL性能监控软件Nagios的安装及配置教程

    这篇文章主要介绍了MySQL性能监控软件Nagios的安装及配置教程,这里以CentOS操作系统为环境进行演示,需要的朋友可以参考下...2015-12-14
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 详解Mysql中的JSON系列操作函数

    新版 Mysql 中加入了对 JSON Document 的支持,可以创建 JSON 类型的字段,并有一套函数支持对JSON的查询、修改等操作,下面就实际体验一下...2016-08-23
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • 深入研究mysql中的varchar和limit(容易被忽略的知识)

    为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql中遇到的一些commen sense类型的问题。 ...2015-03-15
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • mysql的3种分表方案

    一、先说一下为什么要分表:当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。根据个人经验,mysql执行一个sql的过程如下:1...2014-05-31
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
  • PHP函数strip_tags的一个bug浅析

    PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数...2014-05-31
  • Windows服务器MySQL中文乱码的解决方法

    我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。...2015-03-15