Oracle学习总结7--null、聚合函数、分组查询

null、聚合函数、分组查询

      • null
      • 聚合函数
      • 分组查询
        • having
        • having和where的区别

null

--关于null的处理 ,null是一个字段没有被赋值时的状态
 --注意:任何数据与null进行运算结果一定为null,如果要避免这个问题,可以在运算时给null设置默认值
 -- nvl(字段,默认值):如果字段内容不为null则返回当前值,如果为null则用默认值代替
 --查询 员工的姓名,工资,奖金 , 月收入(工资+奖金)
 select ename,sal,comm,sal+ nvl(comm,0)  as 月收入 from emp
 
 --在查询语句查找某字段为null的情况
   --查询 comm为null(空)的员工信息
   select * from emp where comm is null
   
   --查询 comm 不为null的员工信息
   select * from emp where comm is not null

聚合函数

--max(列):返回该列的最大值
    --查询20部门中最高工资是多少
    select max(sal) from emp where deptno=20
    --查询公司最晚入职时间是多少
    select max(hiredate) from emp
 --min(列):返回该列的最小值
    --查询20部门中最低工资是多少
    select min(sal) from emp where deptno=20
    --查询公司最早入职时间是多少
    select min(hiredate) from emp
 --sum(数字列):返回该列数字的总和
    --计算20部门的工资总支出多少
    select sum(sal) from emp where deptno=20
    
 --avg(数字列):返回该数字列的平均工资
     --计算出20部门的平均工资是多少
     select avg(sal) as 平均工资 from emp where deptno=20
  --count(*):返回结果集中的条目数(即返回结果集有多少条数据)
   --查询20部门中有多少人
      select count(*) from emp where deptno=20;
      
   --注意:
     --1、聚合函数单独使用返回一行一列(即一个值)
     --2、聚合函数只能与聚合函数或者分组列一起写在select后
     --3、聚合函数会自动忽略null值,如要避免忽略null则使用nvl提前设置默认值
     
     select  max(sal),min(sal) from emp
    --计算公司的平均奖金
    select comm from emp
    select avg(comm) from emp 
    
    select nvl(comm,0) from emp
    select avg( nvl(comm,0))  from emp

分组查询

--分组查询,注意在分组查询中使用聚合函数是对每组进行聚合运算
--注意:在分组查询中 select 后只能使用分组列和聚合函数
  --统计公司一共有多少员工
  select * from emp 
  select count(*) from emp
  --统计公司中每个部门有多少员工
  select deptno,count(*) as 部门员工人数  from emp  group by deptno 
  
  --统计公司每个部门中各有多少位工资大于1600的员工,并按照部门编号升序显示
  select deptno,count(*) as 人数 
  from emp 
  where sal>1600 
  group by deptno  
  order by deptno asc
  --统计各个职位的平均工资,并按照平均工资升序显示
  select job,avg(sal) from emp group by job order by avg(sal) asc
  --统计各个部门中各个职位的平均工资,并按照平均工资升序显示
   
  select deptno,job,avg(sal) from emp  
  group by deptno,job  
  order by avg(sal) asc

having

/*
0、对数据源中得每条进行where条件判断将符合条件的放入结果集 
1、先产生结果集  
2、再分组  
3、对每组进行聚合运算 
注意:由于执行顺序,所以在where中不能对聚合结果(由聚合函数产生的计算列)进行过滤
如果在分组查询中需要对聚合结果进行过滤,需要使用having 字句 ,having的作用就是对
分组之后的聚合结果进行过滤
*/
select deptno,count(*) from emp 
group by deptno having count(*)>4

having和where的区别

where having
select、delete、update中可用 只能用在group by后
符合条件的放入结果集(产生结果集之前) 对分组后的聚合函数结果做过滤(产生结果集之后)
不能对聚合结果过滤 可以对聚合结果过滤

你可能感兴趣的:(Oracle,sql)