DQL查找语句续集..............................
分组函数(也叫多行处理函数)
1:
select sum(sal) from emp;select min(sal)from emp;select max(sal)from emp;select avg(sal)from emp;select count(ename)from emp;
2:分组函数的特点是自动忽略NULL。
select count(comm)from emp;
select ename,(sal+comm)*12 as yearsal from emp;
**数据库中,只要是数据表达式中出现了NULL,就没有结果。
3:ifnull 语句(空处理函数),对空进行预处理
格式:ifnull(可能为null的数据,被当作什么函数)也称为单行函数
select ename,ifnull(comm,0)as comm from emp;select ename,(sal+ifnull(comm,0))*12 from emp;
4:分组函数不能直接使用再where语句当中。
select ename from emp where sal>avg(sal);
ERROR 1111 (HY000): Invalid use of group function
5:count(*),与count(字段)不一样。
count(字段)统计这个字段中不为null 的函数。
6:分组函数也可以统计起来用
select min(sal),max(sal),count(*)from emp;
7:groupby
分组函数经常与groupby联合起来使用
当sql语句没有groupby时,会自成一组。
分组函数是在groupby后执行的。
select max(sal)from emp group by job;
当1条函数有groupby时,select里面只允许有参加分组的函数和字段。
8:子查询(select语句中嵌套select语句)
select avg(sal) from emp;
select ename,sal from emp where sal>2073.2;#改成select ename,sal from emp where sal>(select avg(sal) from emp);
9:2个字段联合起来分组
select deptno,job, max(sal) from emp group by deptno,job;
10:having ,分完组之后再过滤
select deptno,max(sal)from emp group by deptno having max(sal)>2500;
select deptno,max(sal)from emp where sal>2900 group by deptno;
#where效率较高,能使用尽量使用
以下是不能使用where的方法
> select-> deptno,avg(sal)-> from emp-> group by deptno-> having-> avg(sal)>2000
having是groupby的搭档
11:DQL完整的语法
select
from
where
group by
having
order by