MySQL函数

时间:2022-05-14
本文章向大家介绍MySQL函数,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

MySQL 函数

详细见官方参考手册 参考手册

1、常见函数

常见函数汇总练习

-- 数学运算函数
SELECT ABS(-8); -- 绝对值 /8/
SELECT CEILING(-1.2) ;-- 向上取整 /-1/
SELECT FLOOR(9.4);-- 向下取整 /9/
SELECT RAND(); -- 返回一个0~1之间的随机数
SELECT SIGN(0); -- 判断一个数的符号,0 返回0 负数返回-1 正数返回1 /0/

-- 字符串函数(字符串起始位置为1)
SELECT CHAR_LENGTH('无关风月'); -- 字符串长度 /4/
SELECT CONCAT('无','关','风','月'); -- 拼接字符串 /无关风月/
SELECT INSERT('wgfy,我题序等你回',1,4,'无关风月'); 
-- 插入,替换(1,4代表从1位置开始替换长度为4) /无关风月,我题序等你回/
SELECT LOWER('Viper'); -- 全部小写 /viper/
SELECT UPPER('viper'); -- 全部大写 /VIPER/
SELECT INSTR('viper','a'); -- 返回第一次出现的子串的索引,若没有则返回0 /0/
SELECT REPLACE('永和XX,岁在癸丑','XX','九年'); -- 替换出现的指定字符串 /永和九年,岁在癸丑/
SELECT SUBSTR('永和九年,岁在癸丑', 6, 100); 
-- 返回指定的子字符串(源字符串,截取的位置,截取的长度)截取长度可以超出字符串长度 /岁在癸丑/
SELECT REVERSE('会于会稽山阴之兰亭'); -- 反转 /亭兰之阴山稽会于会/


-- 时间和日期函数(记住!)
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();

2、聚合函数及分组过滤

函数

函数 描述
count() 计数
sum() 求和
avg() 平均值
max() 最大值
min() 最小值

聚合函数练习(基于school1数据库)

因为最后一个练习是查询不同课程的分,所以要用group by 进行分组

因为要过滤掉均分在60分以下的科目,所以要用having

-- 聚合函数
-- 用于统计表中数据

-- 统计表中记录数(行数)
-- 语法是:COUNT() 
-- 1.COUNT(字段名) 会忽略所有的null值(想查询一个表中有多少个记录,就使用这个)
SELECT COUNT(studentname) FROM student; -- 9
-- 2.COUNT(*) 不会忽略所有的null值 本质是 计算行数
SELECT COUNT(*) FROM student;
-- 3.COUNT(1) 不会忽略所有的null值 本质是 计算行数
SELECT COUNT(1) FROM student;


SELECT SUM(studentresult) AS '总和' FROM result; -- 1829
SELECT AVG(studentresult) AS '平均分' FROM result; -- 76.2083
SELECT MAX(studentresult) AS '最高分' FROM result; -- 100
SELECT MIN(studentresult) AS '最低分' FROM result; -- 45

-- 查询不同课程(所以用 group by)的平均分,最高分,最低分
-- 练习:查询不同课程的 平均分,最高分,最低分(过滤掉均分在60分以下的科目)
SELECT sub.subjectname AS '课程',
AVG(res.studentresult) AS '平均分',
MAX(res.studentresult) AS '最高分',
MIN(res.studentresult) AS '最低分'
FROM `result` res
INNER JOIN `subject` sub
ON res.`subjectno`=sub.`subjectno`
GROUP BY res.`subjectno` -- 制定结果按照 `result` 表的 `subjectno`字段来分组
HAVING AVG(res.studentresult) >=60; 
-- 过滤分组的记录必须满足的次要条件为 过滤掉均分在60分以下的科目

如下图,均分在60以下的科目被过滤掉了

原文地址:https://www.cnblogs.com/xypersonal/p/16269521.html