SQL 子查詢練習


--子查詢練習
/*  
    1、子查詢(內查詢)在主查詢(外查詢)之前一次執行完成
    2、子查詢的結果被主查詢使用
    3、在查詢列表中使用子查詢,只能是單行單列。見練習2
    4、除非進行TOP N 分析,否則不要在子查詢中使用ORDER BY語句,
       因子查詢效率較低,排序耗費資源。見練習3
*/

--練習1:查詢所有工資大於CLARK的員工信息
--把子查詢結果當做一個值使用
SELECT * FROM emp
WHERE sal > (SELECT sal FROM emp WHERE ename = 'CLARK')

--練習2:查詢所有員工信息以及工資總和
--把子查詢結果當做一個列使用
SELECT emp.*,(SELECT SUM(sal) FROM emp) 工資總和
FROM emp;

--練習3:查詢工資最高TOP 5
--把子查詢結果當做一個表使用
SELECT * FROM (SELECT * FROM emp ORDER BY sal DESC)
WHERE ROWNUM <= 5;

--練習4:查詢員工表中第6到第12條數據
--利用子查詢解決ROWNUM不能計算大於等於某個值的問題
SELECT * FROM (SELECT ROWNUM rnum,emp.* FROM emp)
WHERE rnum BETWEEN 6 AND 12;

      --推薦寫法(提前過濾)
      SELECT * FROM (SELECT ROWNUM rnum, emp.* FROM emp WHERE ROWNUM<=12)
      WHERE rnum >=6;
      
--多行子查詢
--練習1:查詢所有不是部門經理的員工
--IN 的使用
SELECT * FROM emp e
WHERE e.empno NOT IN (SELECT manager_id FROM DEPT
WHERE manager_id IS NOT NULL)

--練習2:查詢所有員工人數不少於3人的部門信息
--子查詢中可以使用子句
SELECT * FROM dept
WHERE deptno IN (SELECT deptno FROM emp 
                 GROUP BY deptno
                 HAVING COUNT(*)>=3 )
                 
--相關子查詢(內外交互式)
--練習:查詢員工編號,姓名,部門編號,工資,本部門工資總和
SELECT empno,ename,deptno,sal,
                 (SELECT SUM(sal) FROM emp 
                  WHERE e.deptno = deptno) 部門工資總和
FROM emp e
ORDER BY deptno;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM