目录

一、常用函数

        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;


mysql行专列查询 mysql行专列函数_数据库

图解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; -- 对已经分好组进行筛选


mysql行专列查询 mysql行专列函数_mysql_02

图解HAVING


        2. 字符串相关函数

基本用法及介绍:

mysql行专列查询 mysql行专列函数_服务器_03

 代码演示如下:

-- 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. 数学相关函数

基本用法及介绍:

mysql行专列查询 mysql行专列函数_数据库_04

 代码演示如下:

-- 绝对值
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. 加密和系统函数 

基本用法及介绍:

mysql行专列查询 mysql行专列函数_数据库_05

 代码演示如下

-- 加密函数 
-- MD5加密  为字符串计算出一个 MD5 32字符
SELECT MD5('jack6666') FROM DUAL;

-- PASSWORD 加密函数  
-- 常用于mysql数据库的用户密码加密
SELECT PASSWORD('jack6666') FROM DUAL;


-- 系统函数
-- 查询用户
SELECT USER() FROM DUAL;  -- 查询结果为用户名@ip地址

-- 查询当前系统名称
SELECT DATABASE();


mysql行专列查询 mysql行专列函数_java_06

运行结果


        5. 流程控制函数

基本用法及介绍:

mysql行专列查询 mysql行专列函数_服务器_07

 代码演示如下:

-- 第一个为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. 时间日期相关函数

基本用法及介绍:

mysql行专列查询 mysql行专列函数_mysql行专列查询_08

 代码演示如下:

-- 时间日期相关函数
-- 当前日期
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;

二、最后的话

✨  原创不易,还希望各位大佬支持一下

👍  点赞,你的认可是我创作的动力!

⭐️  收藏,你的青睐是我努力的方向!

✏️  评论,你的意见是我进步的财富!