第一部分 统计型函数

1. 统计函数——count

统计函数:用来统计查询结果的总数量

eg,统计 student 这个表中,总共有多少学生数量

SELECT COUNT(*) FROM `student`;

eg,统计 student 这个表中,age 这一列总共有多少条记录

SELECT COUNT(age) FROM `student`;

eg,统计 student 这个表 name 这一列中,年龄大于18的,总共有多少条记录

SELECT COUNT(name) FROM `student` WHERE `age` > '18';

注意:count(列)在统计的时候,会排除为null的结果

2. 合计函数——sum

sum函数返回满足 where 条件的行的和,一般使用在数值列

eg,统计 student 这个表中,语文、数学、英语各科的总成绩

SELECT SUM(`math`), SUM(`chinese`), SUM(`english`)
FROM `student`;
3. 求平均值函数——avg

avg函数返回满足 where 条件的一列的平均值

eg,求 student 这个表中,math 科的平均分

SELECT AVG(`math`)
FROM `student`;
4. 求最大/最小值函数——max/min

一般用在数值列,求该列中的数值最大值和最小值

eg,求 student 这个表中,math 科的最高分和最低分

SELECT MAX(`math`), MIN(`math`)
FROM `student`;
5. group by函数

主要用在分组查询,语法如下:

SELECT 其它函数,`列名`,
FROM `表名`
GROUP BY `列名` HAVING ... ;

eg,查询平均工资低于2000的部门号和它的平均工资

SELECT AVG(`sal`) AS avg_sal,`deptno`
FROM `emp`
GROUP BY `deptno`
HAVING avg_sal < 2000;


第二部分 字符串函数

1. 替换函数——replace

作用:替换字段的值,语法格式如下

SELECT REPLACE(`列名`,'原有值','新值')
FROM `表名`;

eg,修改表 studentsubject 这一列的数据,将值为“数学”的数据,改为“高数”

SELECT REPLACE(`subject`,'数学','高数')
FROM `student`;
2. 比较字符串大小函数——strcmp

逐字符比较两个字符串大小,格式如下

SELECT STRCMP('字符串1','字符串2')
FROM `表名`;

eg,比较表 course 中“boy”和“girl”两个字符串的大小

SELECT STRCMP('boy','girl')
FROM `course`;
3. 截取字符串函数——substring

截取指定列指定位置之间的字符串(位置从1开始,而非0开始),格式如下

SELECT SUBSTRING(`列名`,位置1,位置2)
FROM `表名`;

eg,截取表 coursename 列的前两个字符

SELECT SUBSTRING(`name`,1,2)
FROM `course`;
4. 拼接字符串函数——concat

可以将多列拼接成一列,语法如下

SELECT CONCAT(`列名`,'字符串1','字符串2',`列名`)
FROM `表名`;

eg,拼接表 coursename 列和 sex

SELECT CONCAT(`name`,'的性别是:',`sex`)
FROM `course`;


第三部分 时间日期相关函数

1. 当前日期函数——current_date

作用:获取当前日期,年-月-日,语法如下

SELECT CURRENT_DATE()
FROM `表名`;

eg,获取表 student 的当前日期

SELECT CURRENT_DATE()
FROM `student`;
2. 当前时间函数——current_time

作用:获取当前时间,时:分:秒,语法如下

SELECT CURRENT_TIME()
FROM `表名`;

eg,获取表 student 的当前时间

SELECT CURRENT_TIME()
FROM `student`;
3. 当前时间戳函数——current_timestamp

作用:获取当前时间戳,年-月-日 时:分:秒,语法如下

SELECT CURRENT_TIMESTAMP()
FROM `表名`;

eg,获取表 student 的当前时间戳

SELECT CURRENT_TIMESTAMP()
FROM `student`;
4. 两个日期差函数——datediff

计算两个日期的差值,返回天数,语法如下

SELECT DATEDIFF('日期1','日期2')
FROM `表名`;

eg,求表 course从建表日期2021-1-2开始到现在相差多少天

SELECT DATEDIFF(CURRENT_DATE(),'2021-1-2')
FROM `course`;


第四部分 流程控制函数

1. if函数

对if中的表达式进行判断,如果为true,则展示值1,如果为false,则展示值2
语法如下

SELECT IF(表达式,'值1','值2')
FROM `表名`;

eg,表 student 中,sex是m的展示为男,否则展示为女

SELECT IF(`sex`='m','男','女'),`name`
FROM `student`;
2. case函数

类似分支的效果,根据不同带条件,展示不同的值,语法如下

SELECT CASE `列名`
WHEN '值1' THEN '展示值1'
WHEN '值2'THEN '展示值2'
WHEN '值3' THEN '展示值3'
WHEN '值4' THEN '展示值4'
ELSE '展示值5'
END
FROM `表名`;

或者是

SELECT CASE 
WHEN 表达式1 THEN '展示值1'
WHEN 表达式2 THEN '展示值2'
WHEN 表达式3 THEN '展示值3'
WHEN 表达式4 THEN '展示值4'
ELSE '展示值5'
END
FROM `表名`;

eg,表 student 中,sex是m的展示为男,为w的展示为女

SELECT CASE `sex`
WHEN 'm' THEN '男'
WHEN 'w'THEN '女'
ELSE '性别错误'
END
FROM `student`;

eg,表 student 中,以age进行分类展示

SELECT CASE
WHEN `age`< 18 THEN '未成年'
WHEN `age` >= 18 THEN '成人'
WHEN `age` >= 70 THEN '老年人'
ELSE '分类不详'
END
FROM `student`;