以下所有演示依赖MySQL自带表emp,dept和salgrade表
统计函数
1、合计/统计函数-count
count(*)统计所有行数
count(列名)统计当前列非空行数
select * from emp;
-- 统计emp表总行数
select count(*) from emp;
-- 统计comm列的非空行数
select count(comm) from emp;
合计函数-sum、avg、max、min
sum函数返回满足where条件的行的和
-- 统计薪水的总和
select sum(sal) from emp;
-- 统计工作位MANAGER的人的薪水总和
select sum(sal) from emp where job='MANAGER';
avg函数返回满足where条件的列的平均值
-- 统计薪水的平均值
select avg(sal) from emp;
-- 统计工作位MANAGER的人的薪水平均值
select avg(sal) from emp where job='MANAGER';
max、min函数统计满足where条件的列的最大值和最小值
-- 统计薪水的最大值和最小值
select max(sal),min(sal) from emp;
-- 统计工作位MANAGER的人的薪水最大值和最小值
select max(sal),min(sal) from emp where job='MANAGER';
分组统计
group by对列进行分组,having对分组后的结果进行过滤
--分组统计,利用mysql数据库中自带的emp,dept,salgrade三张表进行演示
--统计每个部门的平均薪水
select avg(sal),deptno from emp group by deptno;
--统计每个部门每个工作的平均薪水
select avg(sal),job,deptno from emp group by deptno,job;
--统计平均薪水低于2200的部门和平均薪水
select avg(sal) as avgsal,deptno from emp group by deptno having avgsal < 2200;
-- 按工作进行分组且去掉没有奖金的员工
select * from emp group by job having comm is not null;
字符串函数
--字符串函数
select charset(ename) from emp;
select concat(ename,' job is ',job) from emp;
select instr('qwertyuiop','tyu') from dual; --dual 亚元表,系统表
select ucase(ename) from emp;
select lcase(ename) from emp;
select left(ename,2) from emp;
select right(ename,2) from emp;
select length('hello world') from dual; --按字节返回
select ename,replace(job,'MANAGER','jl') from emp;
select strcmp('qwe','qwe') from dual;
select strcmp('qwe','awe') from dual;
select substring(ename,1,2) from emp;
select ltrim(' qwe') from dual;
select rtrim('qwe ') from dual;
select trim(' qwe ') from dual;
数学函数
日期函数
-- 查询在10分钟内发布的消息,msg是一个带有日期的表
select * from msg where date_add(time,interval 10 minute) >= now();
-- 查询现在是多少年
select year(now()) from dual;
-- unix_timestamp() 返回1970-1-1到现在的秒速
select unix_timestamp() from dual;
-- from_unixtime()可以把一个unix_timestamp秒数转换为指定格式的日期
select from_unixtime(1234567890) from dual;
加密函数
流程控制函数
select comm,if(comm,'true','false') from emp;
select comm,ifnull(comm,'为null') from emp;
-- 不在条件内的就变为null并不是保持原值
select job,case when job='CLERK' then '职员' when job='MANAGER' then '经理' when job='SALESMAN' then '销售' end from emp;
查询增强
在MySQL中时间的比较可以直接使用大于小于号比较
like模糊查询时%表示0到多个字符,_表示一个字符
分页查询
select * from 表名 limit start,rows;
表示从start+1行开始取,取rows行,start从0开始计算
多子句查询
select column1,column2... from table
group by column
having condition
order by column
limit start,rows;