- MySQL函数
- 数学函数
- 字符串函数
- 日期和时间函数
- 系统信息函数
- 数学函数
SELECT ABS (-8); #绝对值
SELECT CEILING (9.8) ; #取大值(>=我的最小的整数)
SELECT FLOOR(9.8); #取小值(<=我的最大的整数)
SELECT RAND(); #0-1之间的随机数
SELECT RAND(5); #以某个数作为种子,返回重复随机数
符号函数-- #正数:1 负数:-1 0:0
SELECT SIGN(-99); #符号函数,只是笼统的返回正负值和0
SELECT SIGN (0);
SELECT SIGN (-25)
- 字符串函数
SELECT CHAR_LENGTH ('好好学习,天天向上'); #计算器(+),计算字符串中包含的字符数--包括 ,
SELECT CONCAT('偶','耐','你'); #合并字符串--强行拼接在一起
SELECT INSERT ('要想做事,先学做人',3,2,'做好事'); #替换字符串,从第某个位置开始,替换某个长度
SELECT INSERT ('要想做事,先学做人',100,2,'做好事'); #如果起始位置超过了字符串长度,则直接返回,不 做任何改变
SELECT LOWER('NI ZAI SHUO SHA ZI LEI'); #变小写的
SELECT UPPER ('i love you'); #变大写的
SELECT SUBSTR('要想做事,先学做人',3,4); #截取,从第几(3)个位置开始截取,截取长度(4)
SELECT LEFT('要1想做事,先学做人',3); #从左边开始,截取3个字符
SELECT RIGHT('要想做事,先学做人',3); #从右边开始,截取3个字符
SELECT REPLACE ('要想做事,先学做人' , '做事', '幸福'); #在某一段字符串里替换:把A用B来替换(A: 前面的; B:后面的)
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 VERSION();
SELECT USER();
- 实际应用
查询姓李的同学,后来发现听错了,要改成姓厉的
首先,先看原先代码:
SELECT studentname
FROM student
WHERE studentname LIKE '李%'
再,看实际应用代码:
SELECT REPLACE(studentname,'李','厉')
FROM student
WHERE studentname LIKE '李%'
- 聚合函数---统计函数
--只有是NOT NULL的才可以,不然其他的如果是null,就不准了
SELECT COUNT(studentname) FROM student;
SELECT COUNT(*) FROM student;
SELECT COUNT(1) FROM student;
SELECT SUM(studentresult) AS 总分 FROM result;
SELECT AVG(studentresult) AS 平均分 FROM result;
SELECT MAX(studentresult) AS 最高分 FROM result;
SELECT MIN(studentresult) AS 最低分 FROM result;
#查询每个课程的平均分、最高分、最低分
#要有个前提----根据不同的科目来分组
#分组关键字的顺序: WHERE -- GROUP BY -- HAVING -- LIMIT
SELECT subjectno , AVG(studentresult) AS 平均分,
MAX(studentresult) AS 最高分 ,
MIN(studentresult) AS 最低分
FROM result
GROUP BY subjectno;
#但是,subjectno显示的结果看着不舒服,怎么直接换成科目名称???
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 --过滤分组的记录必须满足次要的条件---分组之后,才能进行的操作
#最后再程序后面加点小花样,让它降序排列,只看前四名的成绩
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
ORDER BY 平均分 DESC
LIMIT 0,4
;