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;
    复制代码
  • 相关阅读:
    PHPExcel读取excel03/07版到数组
    firefox 自定义快捷键
    phpstorm 自定义函数配置
    解决FPDF报错:FPDF error: Not a JPEG file / FPDF error: Not a PNG file
    mysql学习笔记
    定时备份服务器数据库(借助windows任务计划以及mysqldump)
    discuz 注册用户用到的几个表
    phpstorm配置取消掉63342
    discuz random函数
    discuz X3.2邮箱非必填
  • 原文地址:https://www.cnblogs.com/Soprano/p/10659105.html
Copyright © 2011-2022 走看看