目录
一、常用函数
1. 合计/统计函数
2. 字符串相关函数
3. 数学相关函数
4. 加密和系统函数
5. 流程控制函数
6. 时间日期相关函数
二、最后的话
一、常用函数
1. 合计/统计函数
1.1 COUNT
用于统计表中记录(行)的数量,有COUNT(*)和COUNT(列)两种用法。
COUNT(*)用于统计表中所有记录(含空记录)的数量(行数)。
COUNT(列)用于统计表中某一列的数量,不统计为空的情况。
代码演示如下:
-- count(*)返回满足条件的记录的行数
SELECT COUNT(*) FROM student
WHERE math>=90;
-- count(列)后者返回满足条件且该列不为空的记录的行数
SELECT COUNT(`id`) FROM student;
1.2 SUM
用于计算指定列数据的总和,有SUM(列)和SUM(表达式)两种用法。
代码演示如下:
-- 返回满足条件的记录的指定列数据的和
-- 求表中满足条件的对象的数学总成绩
SELECT SUM(math) FROM student
WHERE math>=80;
-- 分别求表中所有对象的数学总成绩,语文总成绩,英语总成绩
SELECT SUM(math),SUM(chinese),SUM(english)
FROM student;
-- 求表中所有对象的总成绩
SELECT SUM(math+english+chinese) AS total
FROM student;
-- 求表中所有对象的语文平均分
SELECT SUM(chinese)/COUNT(*) AS `avg chinese`
FROM student;
1.3 AVG
一般用于求指定列的平均值。有SUM(列)和SUM(表达式)两种用法。
AVG(列) 相当于 SUM(列)/COUNT(列)
这里注意COUNT(列) 不统计空的哦。
代码演示如下:
-- 求一个班的数学平均分
SELECT AVG(math) FROM student;
-- 求一个班级的总分平均分
SELECT AVG(chinese + math + english) FROM student;
1.4 MAX/MIN
用于求指定列的的最大值/最小值。
代码演示如下:
-- 求班级总分最高分和最低分
SELECT MAX(math+chinese+english) AS `NO.1`,
MIN(math+chinese+english) AS `No.-1`
FROM student;
1.5 GROUP BY
用于对列进行分组统计。
代码演示如下:
-- GROUP BY语句 分组统计
-- 以表中的某一列分组
SELECT AVG(sal) FROM emp ; --直接求平均数求得是该列全部数据的平均数
SELECT AVG(sal),deptno --分组求平均数,求的是各个组数据的平均数
FROM emp GROUP BY deptno; -- 以deptno分组
-- 先以其中的某一列分组,再在分好组的基础上以其中另一列分组
SELECT AVG(sal),deptno,job -- 求各个组的各个分组的平均数
FROM emp GROUP BY deptno,job;
图解GROUP BY
1.6 HAVING
通常和GROUP BY 一起用,用于对分好的组进行筛选。
代码演示如下:
-- HAVING 用于在分好的组中进行筛选
SELECT AVG(sal) AS avgsal,MAX(sal),MIN(sal),deptno,job
FROM emp GROUP BY deptno,job
HAVING avgsal>2000; -- 对已经分好组进行筛选
图解HAVING
2. 字符串相关函数
基本用法及介绍:
代码演示如下:
-- DUAL 亚元表 系统表,可作为测试表使用
-- 字符串相关函数
-- CHARSET 返回字串字符集
SELECT CHARSET(ename) FROM emp;
-- CONCAT 拼接字串
SELECT CONCAT(ename,' 的工资为:',sal) FROM emp;
-- UCASE 转大写 LCASE 转小写
SELECT UCASE(ename) FROM emp;
SELECT LCASE(ename) FROM emp;
-- LENGTH 字串长度
SELECT LENGTH(ename) FROM emp;
-- REPLACE 替换字符 -- DUAL 亚元表 系统表,可作为测试表使用
/* 将zhang 替换成 li*/
SELECT REPLACE('zhangsan','zhang','li') FROM DUAL;
SELECT REPLACE(ename,'S','li') FROM emp;
-- SUBSTRING 截取字符
-- 从ename 中的第一个字符开始截取2个字符
SELECT SUBSTRING(ename,1,2) FROM emp;
-- LEFT RIGHT 从左边或者右边开始取指定个数字符
SELECT LEFT(ename,2) FROM emp;
SELECT RIGHT(ename,2) FROM emp;
-- INSTR 返回指定字符串片段出现的位置
SELECT INSTR('hello world','wo');
-- STRCMP 比较两字符串大小
-- 相同返回 0
SELECT STRCMP('1111221','1111') FROM DUAL;
-- LTRIM RTRIM TRIM 去除左端空格 右端空格 两端空格
SELECT LTRIM(' DFFDFE ') FROM DUAL;
SELECT LTRIM(' DFFDFE ') FROM DUAL;
SELECT LTRIM(' DFFDFE ') FROM DUAL;
3. 数学相关函数
基本用法及介绍:
代码演示如下:
-- 绝对值
SELECT ABS(-155) FROM DUAL;
-- 向上取整 比该数大的最小整数
SELECT CEILING(1.8) FROM DUAL;-- 2
SELECT CEILING(-1.8) FROM DUAL; -- -1
-- 向下取整 比该数小的最大整数
SELECT FLOOR(1.9) FROM DUAL;-- 1
SELECT FLOOR(-1.3) FROM DUAL;-- -2
-- 进制转换 --将十进制数字122转为二进制
SELECT CONV(122,10,2) FROM DUAL;
SELECT CONV(122,10,16) FROM DUAL;
-- 二进制转换 将十进制数字122转为2进制
SELECT BIN(122) FROM DUAL;
-- 转十六进制 将十进制数字122转为十六进制
SELECT HEX(122) FROM DUAL;
-- 保留小数位数
SELECT 12345.6789 FROM DUAL;
-- 将数字12345.678910 保留两位小数
SELECT FORMAT(12345.6789,2) FROM DUAL;--12345.67
-- 求最小值
SELECT LEAST(12,-10,34,4.0,0) FROM DUAL;-- -10
-- 取余 求16%3=?
SELECT MOD(16,3) FROM DUAL;-- 1
-- 随机数(范围 0-1)
-- 未指定种子是每次执行结果不同
SELECT RAND() FROM DUAL;
-- 指定种子后,每一执行结果相同
SELECT RAND(9.9) FROM DUAL; -- 种子可指定任意数字
4. 加密和系统函数
基本用法及介绍:
代码演示如下
-- 加密函数
-- MD5加密 为字符串计算出一个 MD5 32字符
SELECT MD5('jack6666') FROM DUAL;
-- PASSWORD 加密函数
-- 常用于mysql数据库的用户密码加密
SELECT PASSWORD('jack6666') FROM DUAL;
-- 系统函数
-- 查询用户
SELECT USER() FROM DUAL; -- 查询结果为用户名@ip地址
-- 查询当前系统名称
SELECT DATABASE();
运行结果
5. 流程控制函数
基本用法及介绍:
代码演示如下:
-- 第一个为true 则返回A 反之返回B
SELECT IF(TRUE,'A','B') FROM DUAL;
SELECT IF(FALSE,'A','B') FROM DUAL;
-- 第一个不为空则返回第一个 反之返回第二个
SELECT IFNULL('A','B') FROM DUAL;
SELECT IFNULL(NULL,'B') FROM DUAL;
-- 从第一句开始判断 一直到为真时停止判断并返回
-- 对应的内容,若全部为假,则返回最后的值;
SELECT CASE
WHEN FALSE THEN 'A'
WHEN TRUE THEN 'B'
WHEN TRUE THEN 'C'
ELSE 'D' END;
6. 时间日期相关函数
基本用法及介绍:
代码演示如下:
-- 时间日期相关函数
-- 当前日期
SELECT CURRENT_DATE() FROM DUAL;
-- 当前时间
SELECT CURRENT_TIME() FROM DUAL;
-- 当前时间戳(日期及时间)
SELECT CURRENT_TIMESTAMP() FROM DUAL;
-- 当前时间
SELECT NOW() FROM DUAL;
-- 获取时间里的日期部分
SELECT DATE(NOW()) FROM DUAL;
SELECT DATE(CURRENT_DATE()) FROM DUAL;
-- 在指定的时间基础上加上一个时间
-- 可以加year month day hour minute second
-- 注意前面要加上 INTERVAL
SELECT DATE_ADD(NOW(),INTERVAL 12 YEAR)
FROM DUAL;
SELECT DATE_ADD(NOW(),INTERVAL 12 SECOND)
FROM DUAL;
-- 在指定时间的基础上减去一个时间
-- 可以加year month day hour minute second
-- 注意前面要加上 INTERVALSELECT DATE_SUB(NOW(),INTERVAL 12 DAY)
FROM DUAL;
SELECT DATE_SUB('2012-10-10',INTERVAL 10 YEAR)
FROM DUAL;
-- 返回两个日期差(结果是天)
SELECT DATEDIFF(NOW(),'2002-11-30')
FROM DUAL;
SELECT DATEDIFF('1999-09-09','2000-01-01')
FROM DUAL;
-- 返回两个时间差(结果是时分秒)
SELECT TIMEDIFF(NOW(),'2022-09-01 01:38:26')
FROM DUAL;
-- 获取指定日期的年月日时分秒
SELECT YEAR(NOW()) FROM DUAL;
SELECT MONTH(NOW()) FROM DUAL;
SELECT DAY(NOW()) FROM DUAL;
SELECT HOUR(NOW()) FROM DUAL;
SELECT MINUTE(NOW()) FROM DUAL;
SELECT SECOND(NOW()) FROM DUAL;
-- UNIX_TIMESTAMP 获得从1970-1-1到现在的秒数
SELECT UNIX_TIMESTAMP()/60/60/24/365 FROM DUAL;
-- 将一个秒数转为从1970-1-1到现在日期
SELECT FROM_UNIXTIME(999999999,'%Y-%m-%d %H:%i:%s')
FROM DUAL;
二、最后的话
✨ 原创不易,还希望各位大佬支持一下
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!