5 MySQL函数
官网:查看MySQL技术文档:
-
5.7版本:MySQL :: MySQL 5.7 Reference Manual :: 12.1 Built-In Function and Operator Reference https://dev.mysql.com/doc/refman/5.7/en/built-in-function-reference.html
-
8.0版本:MySQL :: MySQL 8.0 Reference Manual :: 12.1 Built-In Function and Operator Reference https://dev.mysql.com/doc/refman/8.0/en/built-in-function-reference.html
-- 数学函数
SELECT ABS(-1) -- 绝对值
SELECT CEILING(1.1) -- 向上取整
SELECT FLOOR(1.1) -- 向下取整
SELECT RAND() -- 返回0~1之间的随机小数
SELECT SIGN(0) -- 判断一个输的符号 0返回0
SELECT SIGN(10) -- 正数返回1
SELECT SIGN(-10) -- 负数返回-1
?
-- 字符串函数
SELECT CHAR_LENGTH(‘字符串函数‘) -- 字符串长度
SELECT CONCAT(‘字符串‘,‘函‘,‘数‘,‘拼接‘) -- 字符串函数
SELECT INSERT(‘hello world!‘,6,4,‘,你好!‘) -- 查询,从某个位置开始替换某个长度
SELECT LOWER(‘Hello‘) -- 转小写字母
SELECT UPPER(‘Hello‘) -- 转大写字母
SELECT INSTR(‘Hello‘,‘l‘) -- 返回第一次出现的子串的索引
SELECT REPLACE(‘*1*2*3*‘,‘*‘,‘加油‘) -- 替换出现的指定字符串
SELECT SUBSTR(‘12345654321‘,4) -- 从第4个位开始截取直到末尾
SELECT SUBSTR(‘12345654321‘,4,5) -- 从第4个位置开始截取5个长度的子串
SELECT REVERSE(‘你是猪‘) -- 反转字符串
--
SELECT * FROM `student` WHERE `StudentName` LIKE ‘郭%‘
--
SELECT REPLACE(`StudentName`,‘郭‘,‘李‘) FROM `student`
WHERE `StudentName` LIKE ‘郭%‘
?
-- 查询时间和日期函数
SELECT CURRENT_DATE -- 获取当前日期
SELECT CURDATE()
SELECT NOW() -- 获取当前时间
SELECT LOCALTIME() -- 获取本地时间
SELECT SYSDATE() -- 获取系统时间
SELECT YEAR(NOW()) -- 获取当前年份
SELECT MONTH(NOW()) -- 获取当前月份
SELECT DAY(NOW()) -- 获取当前天数
SELECT HOUR(NOW()) -- 获取当前小时
SELECT MINUTE(NOW()) -- 获取当前分钟
SELECT SECOND(NOW()) -- 获取当前秒钟
?
-- 查询系统
SELECT SYSTEM_USER() -- 获取系统作者
SELECT USER()
SELECT VERSION() -- 获取版本号
5.2 聚合函数(常用)
-- 统计表中的数据(想查询一个表中有多少个记录,就使用这个COUNT())
SELECT COUNT(`StudentName`) FROM `student`; -- COUNT(字段):会忽略所有的NULL值
-- 下面两个:本质都是计算行数
SELECT COUNT(*) FROM `student`; -- COUNT(*):不会忽略所有的NULL值
SELECT COUNT(1) FROM `student`; -- COUNT(1):不会忽略所有的NULL值
?
-- 数学计算函数
SELECT SUM(`StudentResult`) AS ‘总分‘ FROM `result`
SELECT AVG(`StudentResult`) AS ‘平均分‘ FROM `result`
SELECT MAX(`StudentResult`) AS ‘最高分‘ FROM `result`
SELECT MIN(`StudentResult`) AS ‘最低分‘ FROM `result`
?
-- 查询不同课程的平均分、最高分、最低分,平均分大于80的记录
-- 核心:根据不同课程进行分组
SELECT `SubjectName`,AVG(`StudentResult`) AS ‘平均分‘,MAX(`StudentResult`) AS ‘最高分‘,MIN(`StudentResult`) AS ‘最低分‘
FROM `result` r
INNER JOIN `subject` sub
ON r.`SubjectNo`=sub.`SubjectNo`
GROUP BY r.`SubjectNo` -- 通过什么字段来查询
HAVING ‘平均分‘>80