程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 子查詢三(在FROM子句中使用子查詢),from子句

子查詢三(在FROM子句中使用子查詢),from子句

編輯:Oracle教程

子查詢三(在FROM子句中使用子查詢),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;

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved