目录
一、单行处理函数
单行处理函数常见的有哪些?
1、lower 转换小写 select lower(ename) as ename from emp;
2、upper 转换大写 select upper(name) as name from t_student;
3、substr取子串(substr(被截取的字符串,起始下标,截取的长度))
select substr(ename, 1, 1) as ename from emp; 注意:起始下标从1开始,没有0.
找出员工名字第一个字母是A的员工信息?
第一种方式:模糊查询 select ename from emp where ename like 'A%';
第二种方式:substr函数 select ename from emp where substr (ename,1,1) = 'A';
首字母大写 select upper(substr(name,1,1)) from t_student;
select concat (upper (substr (name,1,1)) ,substr (name,2,length (name) - 1)) as result from t_student;
4、length 取长度 select length (ename)enamelength from emp;
5、trim 去空格 select * from emp where ename = trim(' KING');
6、str_ to date 将字符串转换成日期
7、date format 格式化日期
8、format 设置千分位
9、round 四舍五入
select round(1236.567,1) as result from emp;//保留1个小数
select round(1236.567,2) as result from emp;//保留2个小数
select round(1236.567,-1) as result from emp;//保留到十位。
10、rand()生成随机数 select rand() from emp;
11、ifnull可以将null转换成一个具体值
注意:NULL只要参与运算,最终结果一定是NULL。为了避免这个现象,需要使用ifnull函数。ifnull函数用法:ifnull(数据,被当做哪个值)如果“数据”为NULL的时候,把这个数据结构当做哪个值。
补助为NULL的时候,将补助当做0
select ename, (sal + ifnull(comm, 0)) * 12 as yearsal from emp;
12、concat函数进行字符串的拼接 select concat(empno,ename) from emp;
13、case..when..then.when..then..else..end
当员工的工作岗位是MANAGER的时候,工资上调108,当工作岗位是SALESMAN的时候,工资上调508,其它正常。|(注意:不修改数据库,只是将查询结果显示为工资上调)
select ename,job,sal from emp;
select
ename,
job,
(case job when 'MANAGER' then sal*1.1 when 'SALESMAN' then sal*1.5 else sal end) as newsal
from
emp;
二、多行处理函数(分组函数)
多行处理函数的特点:输入多行,最终输出一行。
5个:count 计数 select count (ename) from emp;
sum 求和 select sum(sal) from emp;
avg 平均值 select avg(sal) from emp;
max 最大值 select max(sal) from emp;
min 最小值 select min(sal) from emp;
注意:
1、分组函数在使用的时候必须先进行分组,然后才能用。
2、如果没有对数据进行分组,整张表默认为一组。
3、分组函数自动忽略NULL,你不需要提前对NULL进行处理。
4、分组函数中count(*)和count(具体字段)有什么区别?
count(具体字段):表示统计该字段下所有不为NULL的元素的总数。
count(*):统计表当中的总行数。(只要有一行数据count则++)因为每一行记录不可
能都为NULL,一行数据中有一列不为NULL,则这行数据就是有效的。
5、分组函数不能够直接使用在where子句中。
因为分组函数在使用的时候必须先分组之后才能使用。where执行的时候,还没有分
组。所以where后面不能出现分组函数。
6、所有的分组函数可以组合起来一起用。
分组查询
1、在实际的应用中,可能有这样的需求,需要先进行分组,然后对每一组的数据进行操作。这个时候我们需要使用分组查询。
select
...
from
...
group by
...
计算每个部门的工资和? select job,sum(sal) from emp group by job;
注意:在一条select语句当中,如果有group by语句的话,select后面只能跟:参加分组的字段,以及分组函数。其它的一律不能跟。
找出每个部门的最高薪资? select deptno,max (sal) from emp group by deptno;
2、使用having可以对分完组之后的数据进一步过滤。having不能单独使用,having不能代替where,having必须和group by联合使用。
eg:要求显示最高薪资大于3000
select deptno,max (sal) from emp group by deptno having max(sal) > 3000;
select deptno,max (sal) from emp where sal > 3000 group by deptno;
优化策略:where和having,优先选择where,where实在完成不了了,再选择having。
3、将之前的关键字全部组合在一起,来看一下他们的执行顺序?
select...
from...
where...
group by...
having...
order by...
以上关键字的顺序不能颠倒1.from 2. where 3. group by 4.having 5.select 6.order by
从某张表中查询数据,先经过where条件筛选出有价值的数据。对这些有价值的数据进行分组。分组之后可以使用having继续筛选。select查询出来。最后排序输出!