现在的位置: 首页 > 综合 > 正文

子查询 关于子查询应用外表的字段 2008.10.18 oracle

2013年11月22日 ⁄ 综合 ⁄ 共 762字 ⁄ 字号 评论关闭

^^^^^^^^^^^^^^^^^^^^^^^^^子查询举例^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
找出工资大于所在部门的平均工资:      |
1): select id,userid,salary  from d_emp a where    |
 salary>(select avg(salary) from d_emp  b where     |
 a.dept_id=b.dept_id);

 

把外面表的一个字段a.dept_id  与 子查询表中的一个字段b.dept_id相比较。

 |原理就是 :

执行子查询,然后从a表中取出一条记录取出他的dept_id和b子表进行连接目的是找到所有和他dept_id相同的人就是跟他同部门的人然后算一下avg  然后执行where 看这个人的sal是否大于子查询查出的这个人的部门所有人的avg。

同时注意:本例中 子查询执行一次where 外层查询也执行一次where

2): select id,salary from de_emp a ,(select dept_id ,    |
avg(salary) avgs from d_emp group by dept_id) b     | 
where a.dept_id=b.dept_id and a.salary>b.avgs;     |

 

原理:先构造一个表 这个表里的每一条记录都是一个部门的avg

            然后执行where  找出a表中满足这样条件的记录

            1);a.dept_id=b.dept_id ;

            2):  a表中的每一条记录的sal 要大于 在b表中查出的与它同部门的avg。

总结:子查询可以放到sql任何合法的地方*******************************|

【上篇】
【下篇】

抱歉!评论已关闭.