SQL—基本常用函数
提示:本人新手,仅供参考
案例成绩表结构
1、AVG 函数
AVG 函数返回数值列的平均值,NULL 值不包括在计算中
-- 查询整个年级的语文平均分
SELECT AVG(score) AS "语文平均分" FROM grade WHERE `subject` = '语文'
-- 查询语文成绩高于平均分的同学及分数
SELECT st_name AS '姓名',score AS '分数' FROM grade WHERE `subject` = '语文' AND
score > (SELECT AVG(score) FROM grade WHERE `subject` = '语文')
2、COUNT() 函数
COUNT() 函数返回匹配指定条件的行数
SELECT COUNT(id) FROM grade
3、TOP 函数
FIRST() 函数返回指定的字段中第一个记录的值
注意:TOP 是Sql Server 数据库中的,在MySQL使用LIMIT限制条数
-- 左闭右开
SELECT * FROM grade LIMIT 0,5
4、MAX() 函数
MAX 函数返回一列中的最大值,NULL 值不包括在计算中
SELECT MAX(score) FROM grade
5、MIN() 函数
MIN 函数返回一列中的最小值,NULL 值不包括在计算中
SELECT MIN(score) FROM grade
6、SUM() 函数
SUM 函数返回数值列的总数(总额)
SELECT SUM(score) FROM grade
7、UCASE() 函数
UCASE 函数把字段的值转换为大写
-- 原值 Ms Wang 转换后值MS WANG
SELECT LCASE(`name`) FROM teacher
8、LCASE() 函数
LCASE 函数把字段的值转换为小写
-- 原值 Ms Wang 转换后值ms wang
SELECT LCASE(`name`) FROM teacher
9、MID() 函数
MID 函数用于从文本字段中提取字符
第一个参数是要提取字符的字段,第二个参数是起始位置(起始值是 1),第三个参数是字符个数(如果省略则是返回剩余文本)
SELECT MID(score,1,3) score FROM grade
10、LEN() 函数
LEN 函数返回文本字段中值的长度
注意:LEN()是Sql Server 数据库中的,在MySQL使用LENGTH()
SELECT LENGTH(score) score FROM grade
11、ROUND() 函数
ROUND 函数用于把数值字段舍入为指定的小数位数
-- 假设price为16.88
--表示对score进行保留一位小数
SELECT ROUND(score,1) FROM grade
舍入规则(我理解的):如1.501只保留整数,它是与1.5比较大于1.5进位,小于或等于1.5的舍去
12、NOW() 函数
NOW 函数返回当前的日期和时间
注意:NOW()是MySQL数据库中的,在Sql Server 数据库中使用
SELECT NOW() AS '当前日期和时间' FROM DUAL
13、FORMAT() 函数
FORMAT 函数用于对字段的显示进行格式化
注意:FORMAT() 是Sql Server 数据库中的,在MySQL使用DATE_FORMAT()
说是对字段的显示进行格式化,但我在网上只看到了它对时间类型数据进行格式化,不知道能否自定义格式类型不!
-- 在MySQL中是DATE_FORMAT
-- DUAL是伪表,用于保证语句的结构完整
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d') AS '当前日期' FROM DUAL
14、GROUP BY 语句
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组
-- 查询学科名以及对应的平均分
SELECT `subject` AS '学科',AVG(score) AS '平均分' FROM grade GROUP BY `subject`
15、HAVING 子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字语句内无法使用聚合函数,HAVING子句一般用于对聚合函数的值做限定,通常与GROUP BY函数一起使用
需求:查询一班平均分大于60的科目及其平均分
SELECT `subject` AS '学科',AVG(score) AS '平均分' FROM grade WHERE st_class = 1 GROUP BY `subject` HAVING AVG(score) > 60
16、GROUP_CONCAT()函数
这个函数在MySQL中有,在其他的数据库中有没有不知道!
用于一对多字段的连接,将多的值字符串拼接在一起,中间用逗号隔开
需求:查询班级对应班主任姓名和学生姓名
主要的是因为班级和学生是一对多的关系,又要将他们同时查出来,只用JOIN无法做到将学生姓名统计在一起,查询出来是多条记录
SELECT t.class_num AS '班级',t.`name` AS '班主任姓名',
GROUP_CONCAT(g.st_name) AS '学生姓名'
FROM teacher t LEFT JOIN grade g ON t.class_num = g.st_class
WHERE g.`subject` = '语文' GROUP BY t.`name`
17、CONCAT 函数
用于字符串的拼接
CONCAT做字符串拼接,防止SQL注入
-- 用在查询条件中
SELECT * FROM greade WHERE CONCAT('%',st_name,'%') AND del_flag = 0
-- 用在查询结果中
SELECT CONCAT(begin_time,'-',end_time) AS '电影播放时间' FROM schedule
总结
这些常用函数在一些特殊的需求中还是特别有用的!
菜鸟教程链接
W3School教程链接
菜鸟教程更加全面,但是界面丑!