自身关联
查询出每个雇员的编号,姓名及其上级领导的编号,姓名:
SELECT e.empno eno, e.ename ename, m.empnomno, m.ename mname
FROM emp e, emp m
WHERE e.mgr = m.empno(+);
查询出在1981年雇拥的全部雇员的编号,姓名,雇拥日期(按照年-月-日显示),工作、领导姓名,雇员月工资,雇员年工资(基本工资+奖金)、雇员工资等级、部门编号,部门位置、并且要求这些雇员的月基本工资在1500—3500之间,将最后的结果按照年工资的降续排列,如果你那工资基本相等的,则按照工作进行排序:
样例分析:
确定所需要的数据表
emp:编号、姓名、雇拥日期、工作、月工资、计算年工资;
emp:领导姓名;
dept:部门编号,名称,位置;
salgrade:工资等级;
确定关联字段:
雇员和领导:emp.mgr =memp.empno;也就是说雇员的领导编号,要和同一张表的雇员编号相同,就是雇员也是领导,领导也是雇员,同一张表的连接操作;
雇员和部门:emp.deptno = dept.deptno;
雇员和工资等级:emp.sal BETWEEN salgrade.losal AND salgrade.hisal;
SELECT DISTINCT e.empno,e.ename, e.hiredate,e.sal,(e.sal + NVL(e.comm,0))*12 income, m.ename mname,
d.deptno dno, d.dname dname, d.loc, s.grade,DECODE(s.grade, 1,'E等级',2,'D等级',3,'C等级',4,'B等级',5,'A等级') 工资等级
FROM emp e,emp m, dept d, salgrade s
WHERE TO_CHAR(e.hiredate,'yyyy') = '1981'AND e.sal BETWEEN 1500 AND 3500 AND
e.mgr = m.empno(+)
AND e.deptno = d.deptno
AND e.sal BETWEEN s.losal AND s.hisal
ORDER BY income desc, e.job;