第二題: 列出薪金比“SMITH”或“ALLEN”多的所有員工的編號、姓名、部門名稱、其領導姓名。
--第一步:找出“SMITH”或“ALLEN”的工資
ename,sal
from emp
where ename in('SMITH','ALLEN');
ename,sal
from emp
where ename='SMITH' or ename='ALLEN';
--第二步:以上的查詢返回的多行單列的記錄,按照子查詢的要求在WHERE子句中寫合適,
--所以這個時候將上面的查詢作為一個子查詢出現oracle查詢結果前10條,繼續查詢符合此要求的員工的編號、姓名。
e.empno,e.ename,sal
from emp e
where sal> any( sal from emp where ename='SMITH' or ename='ALLEN' )
--any:大于最小值
--all大于最大值
* from emp where sal>1600
--第三步:查詢出部門的名稱oracle查詢結果前10條,引入部門表,同時增加消除笛卡爾積的條件
e.empno,e.ename,sal,d.dname
from emp e,dept d
where sal> any( sal from emp where ename='SMITH' or ename='ALLEN' ) and e.=e.
--第四步:領導的信息需要emp表自身關聯
e.empno,e.ename,e.sal,d.dname,m.ename
from emp e,dept d,emp m
where e.sal>any( sal from emp where ename='SMITH' or ename='ALLEN') and e.=e. and
e.mgr=m.empno
any:處理返回的多個值
--例8.7對scott用戶的emp表進行操作,獲得工資大于任意一個部門的平均工資的員工信息,如下:
--第一步:獲取每一個部門的平均工資
,avg(sal)
from emp
group by
--第二步:用any處理上個查詢出來的多個平均值
*
from emp
where sal>any( avg(sal)
from emp
group by )
--例8.8對scott用戶的emp表進行操作,獲得工資大于所用部門的平均工資的員工
*
from emp
where sal>all( avg(sal)
from emp
group by )
--獲取員工和員工老板的名字
e.empno,e.ename||' 的老板是 '||m.ename
from emp e,emp m
where
e.mgr=m.empno
empno
from emp
where ename='JONES'
empno
from emp
where ename='KING'
* from emp;
仔細觀察這個表: