子查询三(在FROM子句中使用子查询)

FROM子句中使用子查询一般都是返回多行多列,可以将其当作一张数据表

 

示例一、查询出每个部门的编号,名称,位置,部门人数,平均工资

SELECT d.deptno,d.dname,d.loc,temp.con,temp.avgsal
FROM dept d,(SELECT deptno dno,COUNT(empno) con,ROUND (AVG(sal),2) avgsal
             FROM emp 
             GROUP BY deptno) temp
WHERE d.deptno=temp.dno;

 

示例二、查询出所有在部门SALES(销售部)工作的员工编号,姓名,基本工资,奖金,职位,入职日期,部门最高和最低工资

复制代码
SELECT e.empno,e.ename,e.sal,e.comm,e.job,e.hiredate,e.deptno,temp.maxsal,temp.minsal
FROM emp e,(
            SELECT deptno dno,MAX(sal) maxsal,MIN(sal) minsal
            FROM emp
            GROUP BY deptno
            ) temp
WHERE e.deptno=(SELECT deptno
                 FROM dept
                 WHERE dname='SALES')
                 AND e.deptno=temp.dno;
复制代码

 

示例三、查询出所有工资高于公司平均工资的员工编号,姓名,基本工资,职位,入职日期,部门名称,位置,上级领导姓名,公司的工资等级,部门人数,平均工资,平均服务年限

复制代码
SELECT e.empno,e.ename,e.job,e.hiredate,d.dname,d.loc,m.ename,s.grade,temp.avgsal,temp.avgyear
FROM emp e,dept d,emp m,salgrade s,(
                                   SELECT deptno dno,COUNT(empno) con,ROUND (AVG(sal),2) avgsal,ROUND(AVG(months_between(SYSDATE,hiredate)/12),2) avgyear
                                   FROM emp
                                   GROUP BY deptno
                                   ) temp
WHERE e.sal>(SELECT AVG(sal)
              FROM emp)
              AND e.deptno=d.deptno
              AND e.mgr=m.empno(+)
              AND e.sal BETWEEN s.losal AND s.hisal
              AND e.deptno=temp.dno;
复制代码

 

示例四、列出工资比ALLEN或者CLARK多的所有员工的编号,姓名,基本工资,部门名称,领导姓名,部门人数

复制代码
SELECT e.empno,e.ename,e.sal,d.dname,m.ename,temp.con
FROM emp e,dept d,emp m,(
                          SELECT deptno dno,COUNT(empno) con
                          FROM emp
                          GROUP BY deptno
                          )temp
WHERE e.sal>ANY(SELECT sal
                 FROM emp
                 WHERE ename IN('ALLEN','CLARK')
                 )
              AND e.ename NOT IN ('ALLEN','CLARK')
              AND e.deptno=d.deptno
              AND e.mgr=m.empno(+)
              AND e.deptno=temp.dno;
复制代码

 

示例五、列出公司各个部门的经理(一个部门只有一个)的姓名,工资,部门名称,部门人数,部门平均工资

 

复制代码
--列出公司各个部门的经理(一个部门只有一个)的姓名,工资,部门名称,部门人数,部门平均工资
SELECT e.ename,e.sal,d.dname,temp.con,temp.avgsal
FROM emp e,dept d,( 
                   SELECT deptno dno,COUNT(empno) con,ROUND(AVG(sal),2) avgsal
                   FROM emp
                   GROUP BY deptno
                   )temp
WHERE e.job='MANAGER'
       AND e.deptno=d.deptno(+)
       AND e.deptno=temp.dno;
复制代码

转载于:https://www.cnblogs.com/Soprano/p/10659105.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值