zoukankan      html  css  js  c++  java
  • 子查询三(在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;
    复制代码
  • 相关阅读:
    HDOJ-3635-Dragon Balls 解题报告
    HDOJ-1217-Arbitrage 解题报告
    C语言控制台窗口图形界面编程(总结)
    PC(win10)上搭建 kubernetes + docker 集群环境
    Hessian 2.0 序列化协议
    对响应式布局的理解
    常用链接集合
    dubbox升级dubbo的过渡方案:通过扩展dubbo的Protocol实现dubbo与dubbox的相互调用
    Wordpress部署 —— 基于Ubuntu、Mysql和Nginx
    关于27种常见设计模式的总结
  • 原文地址:https://www.cnblogs.com/Soprano/p/10659105.html
Copyright © 2011-2022 走看看