函数
函数就是封装了特定的一些功能,直接拿过来使用,如字符串的处理,日期的运算,数值的运算等等。
函数只是对查询结果中的数据进行处理,不会改变数据库中数据表的值。
函数分为单行函数和多行函数:
单行函数:单行函数是指对每一条记录进行计算,并得到相应的结果,返回给用户,也就是说,每条记录作为一个输入参数,经过函数计算得到每条记录的计算结果。
多行函数:多行函数是指对一组数据进行计算,针对这一组数据(多行记录)只返回一个结果,也称为分组函数。
单:改变每一条结果,每一条数据对应一条结果
多:多条数据,最终展示一个结果。
注:除了多行函数(max,min,count,sum,avg),都是单行函数
select empno,ename,lower(ename),upper(ename),sal from emp; -- 单(多个结果)
运行结果:
select max(sal),min(sal),count(sal),sum(sal),avg(sal) from emp; -- 多 (一个结果)
运行结果:
单行函数:
1.字符串函数:
select ename,length(ename),substring(ename,2,3) from emp; -- length长度 substring(2,3)字符串截取从2开始,截取长度为3
运行结果:
2.数值函数:
select abs(-5),ceil(5.2),floor(5.4),round(3.14) from emp; -- abs取绝对值 ceil向上取整 floor向下取整 round四舍五入 这里显示14行,没有必要
运行结果:
select abs(-5),ceil(5.2),floor(5.4),round(3.14) from dual; -- dual实际是一个伪表 在控制台打印一行
运行结果:
注:如果没有where条件的话,from dual 可以省略不写,运行结果还是一样的。
select abs(-5),ceil(5.2),floor(5.4),round(3.14) ;
运行结果:
3.日期与时间函数:
select curdate(),curtime(); -- 获取当前年月日,时分秒
运行结果:
select now(),sysdate(),sleep(2),now(),sysdate() from dual; -- 都是返回年月日时分秒 但是sysdate是返回函数执行的日期和时间
运行结果:
insert into emp values (5200,'bobo','salasman',7698,now(),1000,null,30); -- now()可以表示年月日时分秒,但是插入数据的时候还是要参照表的结构的
添加成功后,查看表,select * from emp;
运行结果:
desc emp; -- date 对应年月日 datetime对应 年月日时分秒
运行结果:
4.流程函数:
if相关:
select empno,ename,sal,if(sal>=2500,'高薪','底薪') as '薪资等级' from emp; -- if - else 双分支结构
运行结果:
select empno,ename,sal,comm,sal+ifnull(comm,0) from emp; -- 如果comm是null,那么取值为0 单分支
运行结果:
select nullif(1,1),nullif(1,2) from dual; -- 如果value1等于value2,则返回null,否者返回value1
运行结果:
case相关:
case等值判断:
select empno,ename,job,
case job
when 'clerk' then '店员'
when 'salesman' then '销售'
when 'manager' then '经理'
else '其他'
end as '岗位',
sal from emp;
运行结果:
case区间判断:
select empno,ename,sal,
case
when sal<=1000 then 'A'
when sal<=2000 then 'B'
when sal<=3000 then 'C'
else 'D'
end as '公资等级',
deptno from emp;
运行结果:
5.JSON函数:先略
6.其他函数:
select database(),user(),version()from dual; -- database数据库 user用户 version版本
运行结果:
多行函数:
select max(sal),min(sal),count(sal),sum(sal),avg(sal) from emp; -- max最大 min最小 count计数 sum总共 avg平均
运行结果:
select max(comm),min(comm),count(comm),sum(comm),avg(comm) from emp; -- max(),min(),count()针对所有类型 sum(),avg()只针对数值类型有效
运行结果:
count一般用来计算:
select * from emp;
运行结果:
select count(ename) from emp;
运行结果:
select count(*) from emp;
运行结果:
都是14条记录。