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;

     

  • 相关阅读:
    php yield
    原来 php 中的 json_encode() 只支持utf-8.不支持gbk啊
    mongodb 二进制安装
    Centos 6.3 安装教程
    php 测试 程序执行时间,内存使用情况
    workerman vmstat服务器状态监控服务
    php大量数据 10M数据从查询到下载 【内存溢出,查询过慢】解决方案
    PHP_EOL DIRECTORY_SEPARATOR
    利用curl 模拟多线程
    Laravel 输出最后一条sql
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4231320.html
Copyright © 2011-2022 走看看