✨✨hello,愿意点进来的小伙伴们,你们好呐!
🐻🐻系列专栏:【MySQL初阶】
🐲🐲本篇内容:MySQL函数的详解
🐯🐯作者简介:一名现大二的三非编程小白,日复一日,仍需努力。
- 统计函数:
- count
- SUM 函数:
- AVG 函数:
- MAX 与 MIN 函数:
- GROUP BY .... HAVING 函数:
- 字符串相关函数 :
- CHARSET 函数:
- CONCAT 函数
- INSTR 函数:
- UCASE 与 LCASE 函数:
- LEFT (string , n)函数:
- LENGTH 函数:
- REPLACE (str,search_str,replace_str)函数:
- STRCMP(str1,str2) 函数:
- SUBSTRING(str,position,length)
- LTRIM 与 RTRIM函数:
- 字符串函数综合运用:
- 数学相关函数:
- 时间日期函数:
- 当前时间:
- 日期的运算:
- 加密函数:
- MD5 函数:
- PASSWORD(str) 函数:
- 流程控制函数:
在MySQL中会有很多函数来简便我们的运算,可以使我们对MySQL中查询表中的数据并对其操作更加优雅,接下来让我来介绍这些优雅的函数…
统计函数:
count
count函数是一个统计类型的函数,可以使用在统计某一条件的物品或者人的个数.
接下来我来演示一下
我们在一个学生表中统计学生的个数.
SELECT COUNT(*) FROM students;
我们统计总分大于250的人数
SELECT COUNT((math + english + chinese)) FROM students
WHERE (math + english + chinese) > 250
COUNT(*) 与 COUNT(列) 有什么区别呢?
两者的作用都是来统计,不过也是会有一点点的区别,对于COUNT(星)来说,是把所有的人数都统计起来,然后COUNT(列) 是对于NULL的行是不会统计起来的,接下来我们再来看看是怎么回事.
在t1表中会有一个name为null,
带星的count
SELECT COUNT(*) FROM t1;
我们这些COUNT(列)后,将会将null的name不计算在内.
SUM 函数:
统计students表中学生math的总分.
SELECT SUM(math) FROM students;
AVG 函数:
统计students表中学生math的平均分.
SELECT AVG(math) FROM students;
MAX 与 MIN 函数:
演示max min 函数的使用:
SELECT MAX(math),MIN(math) FROM students;
这些是统计函数简单场景下的演示,在很多情况下,我们的统计场景不可能这么简单,在开发中我们经常需要分组来进行统计 — 引入 GROUP BY … HAVING函数
GROUP BY … HAVING 函数:
GROUP BY 是用在对查询结果的分组统计上的,HAVING 函数用于限制分组显示的结果,就相当于WHERE用来过滤结果.
接下来我们在emp表中演示一下:
1. 显示每个部门的平均工资和最高工资.
我们可以把问题分解为简单的求出平均工资与最高工资,然后再加强为分部门的平均工资与最高工资
SELECT deptno, AVG(sal) , MAX(sal) FROM emp
GROUP BY deptno;
2. 显示每个部门的每种岗位的平均工资和最低工资.
思路与上个问题一样,化繁为简
SELECT job , AVG(sal) , MIN(sal) FROM emp
GROUP BY job;
3.显示平均工资低于1000的部门号,和它的平均工资.
我们先查找部门的平均工资,然后再过滤,一步一步来
SELECT deptno,AVG(sal) AS sal FROM emp
GROUP BY deptno
HAVING sal < 1000;
字符串相关函数 :
在MySQL中存在着非常便捷的一种函数 – 对字符串进行操作的函数,接下来我来介绍这些函数.
CHARSET 函数:
CHARSET 函数 的作用是返回表中字符串的字符集.
SELECT CHARSET(ename) FROM emp;
因为在创建表的时候,没有指定字符集,所以会以默认的字符集utf8
CONCAT 函数
CONCAT 函数 的使用是可以来拼接字符串,就相当于Java语法中的 ‘+’
SELECT CONCAT(ename, ' 工作是 ', job) FROM emp;
INSTR 函数:
INSTR 函数 的作用是返回子串在字符串中首次出现的位置.
DUAL 是一个亚元表,是MySQL中的一个相当于虚拟的表,因为我们这个函数并不需要在某个表中查询,所以就可以使用亚元表.
SELECT INSTR('123456','456') FROM DUAL;
UCASE 与 LCASE 函数:
UCASE 与 LCASE 函数 这两个函数是来对字符串英文字母进行大小写转化的.
SELECT UCASE('sss') FROM DUAL;
SELECT LCASE('AAA') FROM DUAL;
LEFT (string , n)函数:
LEFT 函数 是从字符串的左边起,去n个字符
SELECT LEFT('123456',3) FROM DUAL;
LENGTH 函数:
LENGTH 函数: 这个函数应该很熟悉,在Java中的字符串长度的方法.
SELECT LENGTH('123456789') FROM DUAL;
REPLACE (str,search_str,replace_str)函数:
REPLACE (str,search_str,replace_str)函数: 是在str中使用replace_str 替换search_str
SELECT REPLACE('123456789','123','111');
STRCMP(str1,str2) 函数:
STRCMP 函数: 是来比较字符串大小的函数.如果str1长则返回1,如果str2长则返回-1
SELECT STRCMP('111','1111');
SELECT STRCMP('111','1');
SUBSTRING(str,position,length)
SUBSTRING(str,position,length) 函数在str中从position开始,取length个字符
SELECT SUBSTRING('123456789',2,2);
LTRIM 与 RTRIM函数:
该函数的作用在于去除字符串前端的空格或者后端的空格,也可以去除前后端的空格 – TRIM
SELECT LTRIM(' 11');
字符串函数综合运用:
我们要以首字符为小写的方式显示所有的员工emp表的名字:
方法1:
我们可以使用REPLACE 将首字母替换为小写,其余的不变.
SELECT REPLACE(ename,LEFT(ename,1),LCASE(LEFT(ename,1))) FROM emp;
方法2:
我们可以使用CONCAT 函数来进行字符串拼接.
SELECT CONCAT(LCASE(SUBSTRING(ename,1,1)),SUBSTRING(ename,2,LENGTH(ename) - 1))
FROM emp;
数学相关函数:
MySQL中提供了很多数学函数可以供我们使用,这些函数都很简单,我就不一一展示,将用途统计起来给各位看…
时间日期函数:
在我们实际中的开发上,会在很多方面都与时间相关,所以MySQL中的时间相关的函数就尤为重要.接下来我们来一起看看这些跟日期相关的函数
时间的函数可以分为4组:
当前时间:
SELECT CURRENT_DATE() FROM DUAL;
SELECT CURRENT_TIME() FROM DUAL;
SELECT CURRENT_TIMESTAMP() FROM DUAL;
日期的运算:
往当前日期加10天.
SELECT DATE_ADD('2022-11-5',INTERVAL 10 DAY) FROM DUAL;
在当前日期减10天
SELECT DATE_SUB('2022-11-5',INTERVAL 10 DAY) FROM DUAL;
计算两个日期的天数差.是第一个时间 减 第二个时间
SELECT DATEDIFF('2022-11-05','2022-11-01') FROM DUAL;
SELECT NOW() FROM DUAL;
加密函数:
MD5 函数:
该函数可以给一串没有经过处理的密码给进行加密,计算出MD5 32位的字符串
SELECT MD5('1hj') FROM DUAL;
PASSWORD(str) 函数:
PASSWORD(str) 函数也是一个给密码进行加密的函数,在MySQL8之前中的密码其实就是用PASSWORD函数来进行加密的,MySQL8后就移除了该函数.
红色的框内是我MySQL的密码.
接下来我们来看看MySQL中的密码加密后的结果是否与现在的一样.
SELECT * FROM mysql.user;
这就是MySQL中的加密函数password()
流程控制函数:
IF函数 与Java中的三目运算符相似,在第一个表达式为真的情况下,就返回第二个表达式,为假就返回第三个表达式.
IFNULL 如果第一个表达式为NULL,就返回第二个表达式,若不为null,就返回第一个表达式.
这个函数相当于Java中的多分支也是很简单很简单的