Oracle学习笔记(二)

8. Group by语句

//需求:现在想求每个部门的平均薪水.

      select avg(sal) from emp group by deptno;
      select deptno avg(sal) from emp group by deptno;
      
      select deptno,job,max(sal) from emp group by deptno,job;
      
     求薪水值最高的人的名字.
     select ename,max(sal) from emp;出错,因为max只有一个值,但等于max值的人可能好几个,不能匹配.
     应如下求:
     select ename from emp where sal=(select max(sal) from emp);
  
     Group by语句应注意,
  
     出现在select中的字段,如果没出现在组函数中,必须出现在Group by语句中.

9. Having 对分组结果筛选

     Where是对单条纪录进行筛选,Having是对分组结果进行筛选.
     select avg(sal),deptno from emp 
     group by deptno 
     having avg(sal)>2000;
     
     查询工资大于1200雇员,按部门编号进行分组,分组后平均薪水大于1500,按工薪倒充排列.
     select * from emp 
     where sal>1200
     group by deptno
     having avg(sal)>1500
     order by avg(sal) desc;

10. 字查询

​ 谁挣的钱最多(谁:这个人的名字, 钱最多)

     select 语句中嵌套select 语句,可以在where,from后.

​ 问哪些人工资,在平均工资之上.

     select ename,sal from emp where sal>(select avg(sal) from emp);  
     //查找每个部门挣钱最多的那个人的名字.
     select ename ,deptno from emp where sal in(select max(sal) from ename group by deptno) //查询会多值.
  
     //应该如下:
     
     select  max(sal),deptno from emp group by deptno;//当成一个表.语句如下:
     select ename, sal from emp join(select  max(sal) max_sal,deptno from emp group
     by deptno) t on(emp.sal=t.max_sal and emp.deptno=t.deptno); 
     
     //每个部门的平均薪水的等级. 
     //分析:首先求平均薪水(当成表),把平均薪水和另外一张表连接.

11. self_table_connection

把某个人的名字以及他的经理人的名字求出来(经理人及这个人在表中同处一行)

分析:首先求出这个人的名字,取他的编号,然后从另一张表与其相对应编号,然后找到经理的名字.

     select e1.ename ,e2.ename from emp e1,emp e2 where e1.mgr= e2.empno.

//empno编号和MGR都是编号.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值