SQL入门第二篇——函数
简介:
单行处理函数的特点:一个输入对应一个输出多行处理函数的特点:多个输入对应一个输出单行处理函数有哪些
SQL入门第二篇——函数
数据处理函数
- 单行处理函数的特点:一个输入对应一个输出
- 多行处理函数的特点:多个输入对应一个输出
- 单行处理函数有哪些
- Lower 转换小写 Upper 转换大写
select lower(ename) from emp;
如果ename那一列有15个数据就会有14个输入和15个输出
select upper(ename) from emp;
一样的只不过相反而已
- substr 取字串(被截取的字符串,起始,截取长度);
找出员工名字第一个字母是A的员工信息
第一种方法:模糊查询,这里就不演示了
第二种方法:substr函数
select ename from emp where substr(ename,1,1) = 'A';
- length 取长度
取出员工名字的长度
select length(ename) from emp;
- trim 取空格
select * from emp where ename = (' KING');
- round 四舍五入
对1236.567取一位小数
select round(1236.567,1) as result from emp;
对1236.567小数点前一位四舍五入
select round(1236.567,-1) as result from emp;
- rand() 取随机数
取一百以内的随机数
select round(rand() * 100,0) from emp;
- ifnull(字段,0)将一个为null转换为具体值
计算总体员工的年薪(月工资+月补助)*12考虑到月补助有可能为null需要使用ifnull 赋值 因为null也会参与运算,那样的话他的年薪都没有了肯定不开心
select ename,(sal + ifnull(comm,0)) *12 as yearsal from emp;
- 还有一个语句做补充:case...when..then..when..then...else..end 类似于switch语句
当员工的工作岗位是MANAGER的时候,给你工资上调10%,当工作岗位是SALESMAN的时候,工资上调50%,其他正常(这里不修改数据库,只作为显示)
select ename,job,sal,(case job when 'MANAGER' then sal * 1.1 when 'SALESMAN' then sal * 1.5 else sal end) from emp;
分组函数(多行处理函数)
- 多行处理函数的特点:多个输入对应一个输出
- 分组函数在使用的时候必须先分组,然后才能使用如果没有分组整张表默认为一组
- min/max
计算最低工资
select min(sal) from emp;
计算最高工资
select mxa(sal) from emp;
- sum
求工资总和
select sum(sal) from emp;
- 求平均工资
select avg(sal) from emp;
- 求员工总量
select count(ename) from emp;
- 分组函数需要注意哪些
- 分组函数自动忽略null
- 分组函数count( * )和count(具体字段)区别在于count(具体字段)只记录具体字段的行数,count(*)记录总行数
- 分组函数不能够直接使用在where子句中
分组查询(很重要)
- 当我们知道对某个部门的工资和就需要使用
- select ..... from ....where...gruop by....order by....
- 执行顺序:from > where > gruop by > select > order by 所以我们知道了为什么上面说分组函数不能在where后面使用
- select ename,job,sum(sal) from emp group by job;
这个语句在mysql中可以执行,但没有意义,在Oracle中会报错
这里就是:在一条select 语句中,如果有group by语句的话,select后面只能跟:参加分组的字段,以及分组函数其它一律不跟。
就像这样:select job sum(sal) from emp group by job;
- 找出每个部门的最高薪资
select deptno,max(sal) from emp group by deptno;
- 找出每个部门薪资大于3000的
第一种:select deptno,max(sal) from emp where sal>3000 group by deptno;
第二种:select deptno,max(sal) from emp group by deptno having max(sal)>3000;
- 找出平均薪资超过2500的
select deptno avg(sal) from emp group by deptno having avg(sal) > 2500;
- 总结(单表查询)
select
...
from
...
where
...
group by
...
having
...
order by
...
执行顺序:from>where>group by>having>select>order by
小知识:distinct去重,要去除重复记录放在最前面使用select后面