(05)oracle新人筆記------子查詢(重點)

一、單行子查詢:=   <   >    >=    <=     <>

  1. SELECTename

FROM emp

WHERE sal>(SELECT sal

             FROM emp

             WHERE ename='JONES');

 

  1. SELECTename,job

FROM emp

WHERE job=(SELECT job

           FROM emp

           WHERE empno=7369)

AND sal>(SELECT sal

         FROM emp

         WHERE empno=7876);

 

 

  1. 子查詢中使用組函數

SELECT ename,job,sal

FROM emp

WHERE sal=(SELECT MIN(sal)

             FROM emp);      

 

  1. HAVING子句中的子查詢

SELECT deptno,MIN(sal)

FROM emp

GROUP BY deptno

HAVING MIN(sal)>(SELECT MIN(sal)

                    FROM emp

                    WHERE 57 ptno=20);

 

 

查詢哪個部門的員工人數高於平均人數

SELECT deptno,count(empno)

FROM emp

GROUP BY deptno

HAVING COUNT(empno)>(

                     SELECT AVG(COUNT(empno))

                     FROM emp

                     GROUP BY deptno); 

 

 

 

二、多行子查詢   IN / ANY / ALL

IN

SELECT ename,sal

FROM emp

WHERE empno IN(SELECT mgr FROM emp);

 

 

ANY(或)

(1)  >ANY       (2)  

查詢部門編號不爲10,工資比10部門任意一名員工工資高的 編號、姓名.....

SELECT empno,ename,job,sal

FROM emp

WHERE sal>ANY(SELECT sal FROM emp WHERE deptno=10)

AND deptno<>10;

 

ALL(與)

查詢部門編號不爲10,工資比10部門所有員工工資高的 編號、姓名.....

SELECT empno,ename,job,sal

FROM emp

WHERE sal>ALL(SELECT sal FROM emp WHERE deptno=10)

AND deptno<>10;

 

 

 

三、多列子查詢

  • SELECTename,deptno,job,hiredate

FROM emp

WHERE (deptno,job) IN 

       (SELECT deptno,job FROM emp WHERE       

        TO_CHAR(hiredate,'yyyy')='1981')

AND TO_CHAR(hiredate,'yyyy')<>'1981';

 

  • 查詢和1981年入職的任意一個員工的部門或職位相同員工姓名、部門、職位、入職日期,不包括1981入職員工。

SELECT ename,deptno,job,hiredate

FROM emp

WHERE deptno IN 

(SELECT deptno FROM emp WHERE TO_CHAR(hiredate,'YYYY')='1981')

AND job IN 

(SELECT job FROM emp WHERE TO_CHAR(hiredate,'YYYY')='1981')

AND TO_CHAR(hiredate,'YYYY')<>'1981';

 

四、在FROM子句中使用子查詢

SELECT a.ename,a.sal,a.deptno,b.salavg

FROM emp a,

    (SELECT deptno,avg(sal) salavg FROM emp GROUP BY deptno) b

WHERE a.deptno=b.deptno

AND a.sal>b.salavg

 

五、分頁查詢

1、ROWNUM介紹(就是方便查看的序號,實現分頁)

SELECT  ROWNUM,ename,job,mgr from emp;

 

2、TOP-N查詢

//就輸出指定條記錄

SELECT * FROM emp WHERE ROWNUM<=5;

 

3、ROWNUM分頁

SELECT ename,hiredate

FROM emp

WHERE ROWNUM<=5 

ORDER BY hiredate ASC;

 

 

SELECT emp.ename,emp.hiredate

FROM emp,dept

WHERE ROWNUM<=2 AND dept.loc='CHICAGO'

ORDER BY hiredate ASC;

 

 

SELECT * FROM 

         (SELECT a.*,ROWNUM nu FROM 

                               (SELECT * FROM emp) a

          WHERE ROWNUM<=6)

WHERE nu>3;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章