数据处理函数
又被称为单行处理函数
单行处理函数的特点:一个输入对应一个输出。和单行处理函数相对的是:多行处理函数。
(多行处理函数的特点:多个输入,对应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;