查詢出每一個雇員的姓名,工資,部門名稱,工資在公司的等級及其領導的姓名,領導的工資,以及領導所相應的等級



如題:

查詢出每一個雇員的姓名,工資,部門名稱,工資在公司的等級及其領導的姓名,領導的工資,以及領導所相應的等級


這是oracle的默認Scott用戶以下的emp。dept 和 salgrade 表間的一道思考題。


 雇員表(emp)

記錄了每一個雇員的基本信息

 

NO  字段         類型            描寫敘述

1     empno       Number(4)    雇員編號

2     ename       Varchar2(10)      雇員姓名

3     job         Varchar2(9)     工作職位

4     mgr       Number(4)           雇員的領導(經理)編號

5     hierdate      date          入職日期

6     sal          Number(7,2)    月薪/工資

7     comm        Number(7,2)    獎金

8     deptno        Number(2)      雇員所屬部門的編號


 部門表(emp)

記錄了每一個部門的基本信息

 

NO  字段       類型             描寫敘述

1     deptno     Number(2)       部門編號(唯一)

2     dname     Varchar2(14)     部門名稱

3     loc       Varchar2(13)     地址

 

 工資等級表 (salgrade)

一個公司的工資等級制,用來表示同一等級的工資下限及上限

 

NO  字段       類型     描寫敘述

1     Grade      number   等級名稱

2     Losal       number   此等級的最低工資

3     hisal     number   此等級的最高工資


分析:先明白工資等級表(salgrade)中的內容

select * from salgrade;


再查詢查詢出每一個雇員的姓名,工資,部門名稱,工資在公司的等級(salgrade)

SELECT distinct e.ename,e.sal,d.dname,g.grade e_grade FROM emp e,dept d,salgrade g,emp s
WHERE (e.deptno=d.deptno) AND (e.sal BETWEEN g.losal AND g.hisal);


在此上基礎上添加查找上司姓名

SELECT e.ename,e.sal,d.dname,g.grade,s.ename
 FROM emp e,dept d,salgrade g,emp s
 WHERE (e.deptno=d.deptno) AND (e.sal BETWEEN losal AND hisal) AND (s.empno=e.mgr);


最后確定雇員的經理姓名,經理的工資,以及經理工資所相應的等級

SELECT e.ename,e.sal,d.dname,g.grade e_grade,s.ename mgr_name,g2.grade m_grade
FROM emp e,dept d,salgrade g,emp s,salgrade g2
WHERE (e.deptno=d.deptno) AND (e.sal BETWEEN g.losal AND g.hisal) 
AND (s.empno=e.mgr) AND (s.sal BETWEEN g2.losal AND g2.hisal);


從這個樣例能夠看出,對於復雜的多表查詢,要一步一步地實現。不要急於求成。


進一步思考:

假設要將上面求得的結果按如樣式顯示工資的等級,應該怎樣實現

1:   第五等工資

2:   第四等工資

3:   第三等工資

4:   第二等工資

5:   第一等工資

此時僅僅能用DECODE()函數來實現

SELECT e.ename, e.sal, d.dname,
decode(g.grade,5,'第一等工資',4,'第二等工資',3,'第三等工資',2,'第四等工資',1,'第五等工資')
e_grade, s.ename mgr_name, s.sal mgr_sal,
decode(g2.grade,5,'第一等工資',4,'第二等工資',3,'第三等工資',2,'第四等工資',1,'第五等工資') m_grade
FROM emp e,dept d,salgrade g,emp s,salgrade g2
WHERE (e.deptno=d.deptno) AND (e.sal BETWEEN g.losal AND g.hisal)
AND (s.empno=e.mgr) AND (s.sal BETWEEN g2.losal AND g2.hisal)








免責聲明!

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



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