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

查询出每个雇员的姓名,工资,部门名称,工资在公司的等级及其领导的姓名,领导的工资,以及领导所对应的等级如题 查询出每个雇员的姓名 工资 部门名称 工资在公司的等级及其领导的姓名 领导的工资 以及领导所对应的等级 这是 oracle 的默认 Scott 用户下面的 emp dept 和 salgrade 表间的一道思考题 雇员表 emp 记录了每个雇员的基本信息

大家好,我是讯享网,很高兴认识大家。

如题:

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

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




小讯
上一篇 2025-01-23 16:52
下一篇 2025-02-10 12:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/119975.html