第一部分 统计型函数
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,修改表 student 中 subject 这一列的数据,将值为“数学”的数据,改为“高数”
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,截取表 course 中 name 列的前两个字符
SELECT SUBSTRING(`name`,1,2)
FROM `course`;
4. 拼接字符串函数——concat
可以将多列拼接成一列,语法如下
SELECT CONCAT(`列名`,'字符串1','字符串2',`列名`)
FROM `表名`;
eg,拼接表 course 中 name 列和 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`;