首页 > 其他 > 详细

查询出每个雇员的姓名,工资,部门名称,工资在公司的等级及其领导的姓名,领导的工资,以及领导所对应的等级

时间:2015-06-06 00:27:45      阅读:479      评论:0      收藏:0      [点我收藏+]


如题:

查询出每个雇员的姓名,工资,部门名称,工资在公司的等级及其领导的姓名,领导的工资,以及领导所对应的等级


这是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 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)

技术分享






查询出每个雇员的姓名,工资,部门名称,工资在公司的等级及其领导的姓名,领导的工资,以及领导所对应的等级

原文:http://blog.csdn.net/magi1201/article/details/46383369

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!