^^^^^^^^^^^^^^^^^^^^^^^^^子查询举例^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
找出工资大于所在部门的平均工资: |
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任何合法的地方*******************************|