Oracle笔记(上) 多表查询

思考题:现在要求查询出每一个雇员的编号、姓名、工资、部门名称、工资所在公司的工资等级。


1、确定所需要的数据表:


emp表:雇员的编号、姓名、工资;

dept表:部门名称;

salgrade表:工资等级;

2、确定已知的关联字段:


雇员和部门:emp.deptno=dept.deptno;

雇员和工资等级:emp.sal BETWEEN salgrade.losal AND salgrade.hisal;

第一步:查询出每一个雇员的编号、姓名、工资


SELECT e.empno, e.ename, e.sal

FROM emp e;

第二步:引入部门表,同时增加一个消除笛卡尔积的条件


SELECT e.empno, e.ename, e.sal, d.dname

FROM emp e, dept d

WHERE e.deptno=d.deptno;

第三步:引入工资等级表,继续增加消除笛卡尔积的条件


SELECT e.empno, e.ename, e.sal, d.dname, s.grade

FROM emp e, dept d, salgrade s

WHERE e.deptno=d.deptno AND e.sal BETWEEN s.losal AND s.hisal;

如果现在有如下的进一步要求:将每一个工资等级替换成具体的文字信息,例如:


1 替换成 第五等工资、2 替换成 第四等工资、3 替换成 第三等工资,依次类推 --> 依靠DECODE()实现


SELECT e.empno, e.ename, e.sal, d.dname

DECODE(s.grade,1,’第五等工资’,2,’第四等工资’,3,’第三等工资’,4,’第二等工资’,5,’第一等工资’) 


gradeinfo

FROM emp e, dept d, salgrade s

WHERE e.deptno=d.deptno AND e.sal BETWEEN s.losal AND s.hisal;

以后的所有的题目都按照类似的方式分析,只要是表关联,肯定有关联字段,用于消除笛卡尔积,只是这种关联字段需要根据情况使用不同的限定符号。


原文:http://bbs.landingbj.com/t-0-243782-1.html

其他参考链接如下:http://bbs.landingbj.com

-The End-


你可能感兴趣的:(oracle,数据表,姓名,思考题)