MySqL速成教程笔记系列五

本文详细介绍了SQL中的单行处理函数,如lower、upper、length、substr、trim、round、rand、ifnull以及case...when...then...end,通过实例展示了它们的使用方法和功能。同时,也提到了多行处理函数,如count、sum、avg、max、min,并解释了它们的特点和注意事项,包括分组函数的应用场景和限制。文章旨在帮助读者理解和掌握SQL中的数据处理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据处理函数

又被称为单行处理函数

单行处理函数的特点:一个输入对应一个输出。和单行处理函数相对的是:多行处理函数。
(多行处理函数的特点:多个输入,对应1个输出!)

单行处理函数常见的有哪些?

(1)lower 转换小写
select lower(ename) as ename from emp;
在这里插入图片描述

(2)upper 转换大写
select upper(name) as name from tt;
在这里插入图片描述

(3)length 取长度
select length(ename) as enamelength from emp;
在这里插入图片描述

(4)substr 取子串(substr(被截取的字符串,起始下标,截取的长度))
注意:起始下标是从1开始,没有0。
不然就会变成这样:
在这里插入图片描述
找出员工名字第一个字母是A的信息。
第一种方式:模糊查询
select * from emp where ename like ‘A%’;
在这里插入图片描述
第二种方式:substr函数
select * from emp where substr(ename,1,1)=‘A’;
在这里插入图片描述

拓展:如果想把名字的首字母变成大写,该怎么操作?
select concat(upper(substr(name,1,1)),substr(name,2,length(name))) as result from tt;
在这里插入图片描述
这个语句似乎有点复杂,我们拆开来看一下。
首先,substr(name,1,1)取名字的首字母;
然后,upper(substr(name,1,1))把名字的首字母变成大写;
接着substr(name,2,length(name))取名字的第二个字母到最后一个字母,length(name)表示名字长度;
最后,concat是字符串拼接函数,把已经变成大写的首字母和剩下的字母拼在一起,大功告成。

(5)trim 去空格
select * from emp where ename = trim(’ KING’);
在这里插入图片描述
///////////////////////////////////////
拓展:select 字段 from 表名; 输出的是字段的信息。如果select后面加的是某个数据值呢?

select abc from emp; //这样写是一定会报错的,因为这句话的意思是在emp表里面找abc这个字段,实际上不存在这个字段。
在这里插入图片描述
select ‘abc’ from emp; // 如果select后面直接跟“字面量/字面值”,结果如下:
在这里插入图片描述
select 1000 as num from emp;
在这里插入图片描述
结论:select后面可以跟某个表的字段名(可以等同看作变量名),也可以跟字面量/字面值(数据)。
////////////////////////////
(6)round 四舍五入
select round(1314.521,0) as result from emp; //0表示保留到整数位
在这里插入图片描述
select round(1314.521,1) as result from emp; //1表示保留到一位小数
在这里插入图片描述
select round(1314.521,-1) as result from emp; //-1表示保留到整数位的倒数第二位
在这里插入图片描述
(7)rand() 生成随机数
select rand() from emp; //生成1以内的随机数
在这里插入图片描述
select round(rand()*100,0) from emp; //生成100以内的随机数
在这里插入图片描述
(8)ifnull 可以将null转换成一个具体值
ifnull是空处理函数,专门处理空的。
在所有数据库当中,只要有NULL参与的数学运算,最终结果就是NULL。
在这里插入图片描述
在这里插入图片描述
select ename, (sal + comm) * 12 as yearsal from emp;
在这里插入图片描述
可以发现:NULL只要参与运算,最终结果一定是NULL。为了避免这个现象,需要使用ifnull函数。
ifnull函数用法:ifnull(数据,被当作哪个值)
如果“数据”为NULL的时候,把这个数据结构当作哪个值。

补助为NULL的时候,将补助当作0
select ename , (sal + ifnull(comm,0) ) * 12 as yearsal from emp;
在这里插入图片描述
(9)case……when……then……when……then……else……end

当员工的工作岗位是MANAGER的时候,工资上调10%,当工作岗位是SALESMAN的时候,工资上调50%(不修改数据库,只是将查询结果显示为工资上调)

select ename,job, sal as oldsal,
(case job when ‘MANAGER’ then sal * 1.1 when ‘SALESMAN’ then sal*1.5 else sal end) as newsal
from emp;
在这里插入图片描述

分组函数(多行处理函数)

多行处理函数的特点:输入多行,最终输出一行。
5个:
count 计数
sum 求和
avg 平均值
max 最大值
min 最小值

注意:分组函数在使用的时候必须先进行分组,然后才能用。如果没有对数据进行分组,整张表默认为一组。

找出最高工资?
select max(sal) from emp;
在这里插入图片描述
找出最低工资?
select min(sal) from emp;
在这里插入图片描述
计算工资和?
select sum(sal) from emp;
在这里插入图片描述
计算平均工资?
select avg(sal) from emp;
在这里插入图片描述
计算员工数量?
select count(ename) from emp;
在这里插入图片描述
分组函数在使用时候的注意事项:

第一点:分组函数自动忽略NULL,不需要提前对NULL进行处理
select comm from emp;
在这里插入图片描述
select count(comm) from emp;
在这里插入图片描述
如上两图:comm一共有很多值,但是用count函数计算comm的数量时,只有4个,因为忽略了NULL。

第二点:count(*) 和 count(具体字段)的不同
select count(*) from emp;
在这里插入图片描述
select count(comm) from emp;
在这里插入图片描述
很容易发现:
count(具体字段):表示统计该字符下所有不为NULL的元素的总数。

count(*):统计表当中的总行数。(只要有一行数据count则++)因为每一行记录不可能都为NULL,一行数据中有一列不为NULL,则这行数据就是有效的。

第三点:分组函数不能够直接使用在where子句中
找出比最低工资高的员工信息。
select ename,sal from emp where sal > min(sal);
在这里插入图片描述
会报错,待学完分组查询(group by)之后就明白了。

第四点:所有的分组函数可以组合起来一起用
select sum(sal),min(sal),max(sal),avg(sal),count(*) from emp;
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值