MySQL系列
文章目录
前言
MySQL 提供了丰富的内置函数,用于处理数据、执行计算、转换格式等操作,本篇将介绍MySQL中常用的一些函数。
本篇文章内容已操作为主
这里的函数比较简单,不再解释了,再对其解释就有一种强说愁的感觉了
上篇文章:MySQL 数据操作全流程:创建、读取、更新与删除实战
一、聚合函数
这部分函数都比较简单
函数名 | 作用 | 示例 | 结果 |
---|---|---|---|
SUM(col) |
求和 | SUM(amount) |
所有 amount 的总和 |
AVG(col) |
平均值 | AVG(age) |
平均年龄 |
COUNT(col) |
计数(忽略 NULL) | COUNT(id) |
行数 |
COUNT(*) |
计数(包含 NULL) | COUNT(*) |
总行数 |
MAX(col) |
最大值 | MAX(score) |
最高分数 |
MIN(col) |
最小值 | MIN(price) |
最低价格 |
测试表
sql
CREATE TABLE students (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
sn INT NOT NULL UNIQUE COMMENT '学号',
name VARCHAR(20) NOT NULL,
qq VARCHAR(20)
);
create table exam_result (
id int unsigned primary key auto_increment,
name varchar(20) not null comment '同学姓名',
chinese float default 0.0 comment '语文成绩',
math float default 0.0 comment '数学成绩',
english float default 0.0 comment '英语成绩'
);
表内容
本篇文章主要以上面两表做测试,上篇文章中已经创建,这里直接使用
1、统计班级共有多少同学
sql
select count(*) from students;
2、统计班级有多少 qq 号
sql
select count(qq) from students;

对比上表可以看到count
函数,对于NULL
值,不做统计。
3、统计本次考试的数学成绩分数个数
sql
select count(math) from exam_result;

对比上表可以看到count
函数,对于重复值,不做统计。
4、统计数学成绩不及格人数
sql
select count(math) from exam_result where math<60;
count
函数可以配合其他语句使用。
5、统计平均总分
sql
select avg(math+chinese+english) 平均总分 from exam_result ;

6、返回英语最高分
sql
select max(english) from exam_result ;

7、返回 > 70 分以上的数学最低分
sql
select min(math) from exam_result where math >70;

二、日期函数

1、获取当前年月日
sql
select current_date();
2、获取当前时分秒
sql
select current_time;
3、获取时间戳
sql
select current_timestamp;
4、在时间中提取日期部分
sql
select date(current_timestamp());
5、在日期的基础上加上日期
sql
select date_add(current_date,interval 10 day);
获取当前日期,并在该日期的基础上增加十天
interval
后可以根据需要使用不同单位(年、月、日、分、秒)
6、在日期的基础上减去日期
sql
select date_sub(current_date,interval 10 day);
获取当前日期,并在该日期的基础上减去十天
7、计算两个日期之间相差多少天
sql
select datediff(current_date,'1949-10-01');
中国成立,距今多少天
8、获取当前日期和时间
sql
select now();

9、测试
sql
//创建一个留言表
create table msg (
id int primary key auto_increment,
content varchar(30) not null,
sendtime datetime
);
//向表中插入测试数据
insert into msg(content,sendtime) values('hello1', now());
insert into msg(content,sendtime) values('hello2', now());
select * from msg;
显示所有留言信息,发布日期只显示日期,不用显示时间:
查询在1分钟内发布的帖子:
可以看到日期是支持直接比较的
三、字符串函数
函数都可以配合select操作对表中的数据进行操作,这里仅对部分场景做演示
1、查看字符串的字符集
sql
select charset(string);

2、要求显示exam_result表中的信息,显示格式:"XXX的语文分:XXX,数学分:XXX,英语分:XXX"
3、在字符串中查找字符串
sql
select instr(string,substring);
在string
中查找字符串substring
出现的位置,找到返回下标(从1开始),未找到返回0。

当目标字符串重复出现时,返回的时第一次出现的下标
4、字符串转为大写
sql
select ucase(strig);
5、字符串转为小写
sql
select lcase(string);
6、从字符串左端提取len个字符
sql
select left(string,len);
6、从字符串右端提取len个字符
sql
select right(string,len);

7、求字符串占用的字节数
sql
selecty

length()
函数在 MySQL 中计算的是字符串的字节长度,而不是字符个数,当前所使用的字符集汉字占三个字节。
8、在字符串中进行字符串的替换 replace
sql
select replace(substring,string,str);
在substring
中查找string
,并将其替换为str
这种替换方式不会影响原表内容,若未找到则不做处理
9、字符串截取 substring
sql
select substring(string,pos,len);

从字符串string
的pos
处开始,向后截取len
个字符。
10、去除字符串中最开始和最后的空格 trim
- trime:去除字符串两端空格
- ltrim:去除字符串最左边的空格
- rtrim:去除字符串右边的

在保存用户信息数据时,一般先对数据执行去除空格操作。由于网络传输过程可能引入不可见空字符,若直接存储含此类字符的数据,后续用户登录时,比如输入密码因存在空格匹配不上,会引发登录失败问题,且排查难度极大。所以,要先过滤掉字符串中的空格,再将处理后的数据存入数据库,以此规避因隐性空格导致的登录故障
四、数学函数
1、abs 取绝对值
sql
select abs(N);
2、bin 转二进制
sql
select bin(N);

可以看到在对小数,进行二进制转换时,会将小数进行向下取整后再操作。
3、hex 转十六进制
sql
select hex(N);
4、 conv 进制转换
sql
select conv(N,fromm_base,to_base);
将数字N
,从from_base
进制 转换成 to_base
进制.
5、format 格式化,保留小数
sql
select format(N,D);

将N
保留D
位小数,处理小数部分遵循四舍五入,若小数部分不够就补0.
6 mod 取模
sql
select mod(x,y);
mod
返回x
对y
取模的值,这里负数取模的方式大家可以自己尝试。
7、rand生成随机数
sql
select rand();

生成的数是从 0.0 ~ 1.0,若想要生成指定范围的我们就直接 * 10n即可实现(如 * 10的话就是 0 ~ 10)
8、ceiling 向上取整
sql
select ceiling(N);

可以看到向上取整,就是当存在小述部分时,去掉小鼠部分直接+1;
9、floor 向下取整
sql
select floor(N);

五、其他函数
1、查看当前用户 user
sql
select user();

获取当前连接到 MySQL 服务器的用户信息,返回结果的格式为 用户名@主机名'
2、database查看当前数据库
sql
select database();

返回当前会话中使用的数据库名称
3、md5 加密
在实际开发中,密码通常不会以明文形式直接存储在数据库中,而 MD5 哈希算法是常用的密码加密方案之一。其核心作用是将原始密码通过加密计算转换为一段固定长度(32 位)的哈希字符串,从而避免明文密码在存储或传输过程中泄露的风险。

这种加密方式,缺点很多,这个我在网络传输部分已经介绍了,这里就补赘述了。
4、ifnull(val1,val2)
当 val1
为 NULL
时返回 val2
,否则返回 val1
本身

这次分享就到这里了,本篇涉及函数较多,但都是比较基础的,多加练习可以快速上手,码字不易,三连三连!!!!