效率低的:SELECT H.EMPNO,E.ENAME,H.HIST_TYPE,T.TYPE_DESC,COUNT(*) FROM HISTORY_TYPE T,EMP E,EMP_HISTORY H WHERE H.EMPNO = E.EMPNOAND H.HIST_TYPE = T.HIST_TYPEGROUP BY H.EMPNO,E.ENAME,H.HIST_TYPE,T.TYPE_DESC;
效率高的,用到了函数!!!!有二个定义的函数,LOOKUP_HIST_TYPE 和LOOKUP_EMPFUNCTION LOOKUP_HIST_TYPE(TYP IN NUMBER) RETURN VARCHAR2AS TDESC VARCHAR2(30); CURSOR C1 IS SELECT TYPE_DESC FROM HISTORY_TYPE WHERE HIST_TYPE = TYP;BEGIN OPEN C1; FETCH C1 INTO TDESC; CLOSE C1; RETURN (NVL(TDESC,’?’));END; FUNCTION LOOKUP_EMP(EMP IN NUMBER) RETURN VARCHAR2AS ENAME VARCHAR2(30); CURSOR C1 IS SELECT ENAME FROM EMP WHERE EMPNO=EMP;BEGIN OPEN C1; FETCH C1 INTO ENAME; CLOSE C1; RETURN (NVL(ENAME,’?’));END; SELECT H.EMPNO,LOOKUP_EMP(H.EMPNO),H.HIST_TYPE,LOOKUP_HIST_TYPE(H.HIST_TYPE),COUNT(*)FROM EMP_HISTORY HGROUP BY H.EMPNO , H.HIST_TYPE;
我想问的是 当在select语句中使用函数时,怎么样体现了效率低的select语句的这段话
WHERE H.EMPNO = E.EMPNO AND H.HIST_TYPE = T.HIST_TYPE
内部是怎么样运行的,(运行的步骤是什么??)
麻烦大家了!!!!!!
解决方案 »
- ORACLE中断select查询
- 更新一个字段为原值加上另外一个串 ,在一个sql里能写吗
- to_char()函数长度问题,请教各位高手
- 数据字典里有视图V$SQLSTAT么?
- 机器p1安装了oracle,机器p2安装了oracle,我想用p1的机器,连接p2的oracle
- 异常处理:分数高高
- 求助! 在Oracle中如何显示某字段最近20分钟的记录?
- 请问在enterprise manage configuration assistant 里的用户名,密码和服务器应该怎么添
- 简单问题:sequence,怎样成设置增长到某一点就置0,重新循换
- 通过培训学unix oracle好吗?请教!在北京,哪的培训机构比较好!
- 请问如何用sql语句将3行数据合并为1行数据?
- 动态sql问题:编译成功,执行报错:
看 执行计划sqlplus:
set autotrace on再执行你的sql,然后面显示的执行计划。2) tkprof
用google搜
原理上也就是这个意思:SELECT H.*, E.ENAME, T.TYPE_DESC
FROM
( SELECT EMPNO, HIST_TYPE ,COUNT(*)
FROM EMP_HISTORY
GROUP BY EMPNO, HIST_TYPE
)H, HISTORY_TYPE T, EMP E
WHERE H.EMPNO = E.EMPNO(+) AND H.HIST_TYPE = T.HIST_TYPE(+)