1.数据处理函数
数据处理函数又称为单行处理函数
单行处理函数的特点:一个输入对应一个输出
单行处理函数常见的有:
lower 转换小写
select lower(ename) as ename from emp;
upper 转换大写
select upper(name) as name from t_student;
substr 取子串(substr(被截取的字符串,起始下标,截取的长度))
select substr(ename, 1, 1) as ename from emp;// 起始下标从1开始,没有0
length 取长度
select length(ename) as 'ename_length' from emp;
trim 去空格
select * from emp where ename = trim(' KING');
str_to_date 将字符串转换成日期
str_to_date('字符串日期' , '日期格式') // MySQL的日期格式 %Y 年
%m 月
%d 日
%h 时
%i 分
%s 秒
date_format 格式化日期
date_format('日期类型数据' , '日期格式')
format 设置千分位
round 四舍五入
注:select后面可以跟某个表的字段名,也可以跟字面量/字面值。
select 21000 as num from dept;
结果为:
select round(1236.567, 0) as result from emp; // 0表示保留小数点后0位
结果为:
select round(1236.567, 2) as result from emp; // 2表示保留小数点后2位
结果为:
select round(1236.567, -1) as result from emp; // 保留到十位
结果为:
rand() 生成随机数
select rand() as result from emp;
ifnull 可以将null转换为一个具体值
在所有数据库当中,只要有null参与的数学运算,最终结果都是null
select ename, sal + comm as salcomm from emp;
为了避免这一现象,需要使用ifnull函数
ifnull(数据, 被当作哪个值):如果“数据”为null时,把这个数据当作逗号后的那个值。
补助comm为null的时候,将补助当作0
select ename, (sal + ifnull(comm, 0)) * 12 as yearsal from emp;
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 new sal
from
emp;
2.分组函数
分组函数又被称为多行处理函数
多行处理函数的特点:多个输入对应一个输出
多行处理函数常见的有:
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;
注:分组函数在使用的时候必须先进行分组,然后才能使用。如果没有对数据进行分组,整张表默认为一组。
分组函数使用中注意事项:
①分组函数自动忽略null,不需要提前对null进行处理。
②分组函数中count(*)表示统计表中的总行数,只要有一行数据count++;
count(具体字段)表示:统计该字段下所有不为null的元素的总数。
③分组函数不能直接使用在where子句中
④所有的分组函数可以组合起来一起使用
3.分组查询
关键字顺序:
select
...
from
...
where
...
group by
...
having
...
order by
...
执行顺序:
from -> where -> group by -> having -> select -> order by
从某张表中查询数据,先经过where条件筛选出有价值的数据。对这些有价值的数据进行分组。分组之后可以使用having继续筛选。select查询出来。最后排序输出。
重点结论:在一条select语句当中,如果有group by语句的话,select后面只能跟参加分组的字段,以及分组函数,其他的一律不能跟。
使用having可以对分完组之后的数据进一步过滤。having不能单独使用,having不能代替where,having必须和group by联合使用。where和having,优先选择where,where完成不了再选择having。
找出每个岗位的平均薪资,要求显示平均薪资大于1500的,除MANAGER岗位之外,要求按照平均薪资降序输出。
select
job, avg(sal) as avgsal
from
emp
where
job <> 'MANAGER'
group by
job
having
avg(sal) > 1500
order by
avgsal desc;