Oracle学习笔记20150817一些复杂查询语句分析

*scott账户自带的三张表结构分析.

emp表:

EMPNO雇员编号(某某雇员的上级也是雇员)
ENAME雇员姓名
JOB雇员职位
MGR雇员上级编号
HIREDATE雇员雇佣起始日期
SAL雇员工资
COMM雇员奖金
DEPTNO雇员所在部门编号

dept表:

DEPTNO部门编号
DNAME部门名称
LOC部门所在地址

salgrade表:

GRADE工资等级
LOSAL最低工资
HISAL最高工资

(1)如图所示命令 select worker.ename||'的上级是'||boss.ename,boss.empno,worker.mgr from emp boss,emp worker where boss.empno=worker.mgr;是将emp表取两个别名,把一张表看成两张表,这样就可以轻松查出每个人的上级是谁,我们称之为自连接.

(2)select ename from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH');查询工作与部门都与SMITH相同的人的姓名.

(3)select emp.ename,emp.sal,t1.sal,emp.deptno,t1.deptno from emp,(select avg(emp.sal) sal,deptno from emp group by deptno) t1 where emp.deptno=t1.deptno and emp.sal>t1.sal;

这条查询命令from中的t1是一次查询结果的别名,select avg(emp.sal),deptno from emp group by deptno;是为了查询出每个部门的平均工资与部门号,为了查询出比自己部门平均工资高的员工就必须先查询出当前每个部门的平均工资,而带着deptno是为了与emp表产生关联.最终查询结果如上图所示.它的思想主要就是把一次查询结果当做一张临时的表来看待.

(4)这是第三点大神们的另一种写法select e1.* from emp e1 where e1.sal>(select avg(sal) sal from emp where deptno=e1.deptno);这种写法也可以达到第三点的目的但是缺点是不能显示where中查询的结果.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值