多表复杂查询分析过程
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
分析:
部门表:部门编号,名称
员工表: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
相关文章推荐
- CCNA实验分析 NAT和路由查询过程
- 关于PL/SQL中复杂的存储过程或者是函数等的查询==避免在PL/SQL当中写SQL语句查询存储过程或者是函数
- 从一道百度面试题到分析输入url到页面返回的过程(或者查询返回过程)
- Solr查询过程源码分析
- Solr查询过程源码分析
- 查询预警中的一个较为复杂的存储过程--dhg
- Hbase 查询过程详解(基于hbase0.98版本后分析的)
- 从一道百度面试题到分析输入url到页面返回的过程(或者查询返回过程)
- 关于Ext3.0中按条件查询并重新加载Grid中的数据的实现过程及store.load的分析
- 多表查询分页存储过程,解决了第二页不显示的问题
- 复杂声明的分析过程
- 查询和分析存储过程性能的T-SQL
- 慢查询日志的分析过程
- Innodb存储引擎查询输出分析(包括查询过程do_select()函数)
- 两个分页存储过程的效率比较(均为多表查询)
- PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询四:分析重写成querytree
- SQL分页存储过程(不支持多表联合查询,不支持多字段排序)
- OVS流表查询过程分析
- 分析输入url到页面返回的过程(查询返回过程)