您的位置:首页 > 其它

多表复杂查询分析过程

2014-05-24 21:43 106 查看
1.列出至少有一个员工的所有部门编号、名称,并统计出这些部门的平均工资、最低工资、最高工资

分析:

部门表:部门编号,名称

员工表:count(员工编号),avg(工资),min(工资),max(工资)

关联字段:部门.部门编号=员工.部门编号

代码如下:

select d.deptno,d.dname,count(e.empno),avg(sal),min(sal),max(sal)

from emp e,dept d

where e.deptno=d.deptno

group by d.deptno,d.dname

having count(e.empno)>=1

2.列出薪水比SMITH或ALLEN多的所有员工的编号、姓名、部门名称、其领导姓名

分析:

员工表:员工编号、姓名

部门表:部门名称

领导表(自连接员工表):领导姓名

关联字段:部门.部门编号=员工.部门编号,员工.mgr=领导.员工编号

代码如下:

select e.empno,e.ename,d.dname,m.ename

from emp e,dept d,emp m

where e.sal>all(

select sal from emp

where ename in('SMITH','ALLEN')

)

and e.deptno=d.deptno

and e.mgr=m.empno(+)

左连接查出=左边的全部记录,一张表就不用去除笛卡尔积,多张就要去掉了,是n-1个笛卡尔积

3.列出所有员工的编号、姓名及其直接上级的编号、姓名,显示的结果按领导年工资的降序排列

分析:

员工表:员工编号、姓名

领导表(自连接员工表):员工编号、姓名,工资

代码如下:

select e.empno,e.ename,m.empno,m.ename,(m.sal+nvl(m.comm,0))*12 income

from emp e,emp m

where e.mgr=m.empno(+)

order by income desc

nvl(m.comm,0)函数:该列为null值时就为0

4.显示高于自己部门平均工资的员工的信息

分析:

雇员表:工资

先查出各部门的平均工资,如

select deptno,avg(sal) mysal from emp group by deptno

取别名,以后要用

代码如下:

select a.ename,a.sal,a.deptno,b.mysal from emp a,

(select deptno,avg(sal) mysal from emp group by deptno) b

where a.deptno=b.deptno and a.sal>b.mysal
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: