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

來源:互聯網
上載者:User

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


如題:

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


這是oracle的預設Scott使用者下面的emp,dept 和 salgrade 表間的一道思考題。


分析:先明確工資等級表(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 sWHERE (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_gradeFROM emp e,dept d,salgrade g,emp s,salgrade g2WHERE (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_gradeFROM emp e,dept d,salgrade g,emp s,salgrade g2WHERE (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)







相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.