--第一个
SELECT emp.* FROM emp,(SELECT AVG(sal) s,emp.deptno FROM emp,dept WHERE emp.deptno=dept.deptno GROUP BY emp.deptno)a
WHERE emp.deptno=a.deptno AND emp.sal>a.s;
--第二个
SELECT * FROM emp a WHERE a.sal>(SELECT AVG(sal) FROM emp b WHERE a.deptno = b.deptno);
第一个是我自己写的,第二个是官方的。第二个我觉得对于平均工资的求职每次都要计算一次,第一个我是直接取出来了一个副表,这样我的平均值只取了一次,我自认为代码比较复杂,但是对于计算机运行,效率上因该提高了。
你们是怎么看的????
你用一个图形化管理工具执行一下,一般都有显示执行时间的,哪个执行的时间少哪个执行的效率就高,这个还需要讨论研究的,看看不就知道了吗?
如果回答对您有帮助,请采纳
感觉还是第二个效率高。第一个使用了 AVG 和 GROUP BY 两个统计函数。
想得到权威结果的话,mysql直接用explain命令分析一下。
explain select * from table1 where some="xxxx";
mssql使用查询分析器。
--第一个
SELECT emp.* FROM emp,(SELECT AVG(sal) s,emp.deptno FROM emp,dept WHERE emp.deptno=dept.deptno GROUP BY emp.deptno)a
WHERE emp.deptno=a.deptno AND emp.sal>a.s;
--第二个
SELECT * FROM emp a WHERE a.sal>(SELECT AVG(sal) FROM emp b WHERE a.deptno = b.deptno);
从SQL上来看,第二个SQL效率要高些,如果数据量比较大的话,效率能差出不少
没有进行测试,但我认为第二个高一些。切不说第一个有group by函数,oracle解析where函数是从右到左,第二个函数直接过滤掉了一部分数据,这样连接起来数据就会变少一些。