--子查詢練習 /* 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;