资源描述:
《oracle经典语句》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.SELECT子句中避免使用“*”7Z-r"H(].? 当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用‘*’是一个方便的方法.不幸的是,这是一个非常低效的方法.实际上,ORACLE在解析的过程中,会将“*”依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间.9N){%C#X9f"@'_;Q$v#[2f2x#
2、2.使用DECODE函数来减少处理时间"m#M/@ }"/?8E%C!X(a 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表.例如:8
3、e6}7f*a9S*R&w,Z+l;x+
4、!l%uSql代码!Q:P&h3_ z)B(P9i1Z:P1.SELECTCOUNT(*),SUM(SAL)FROMEMPWHEREDEPT_NO=0020AND ENAMELIKE‘SMITH%’; !u6C8J$u1T,i"g.c7S7R92.SELECTCOUNT(*),SUM(SAL)FROMEMPWHEREDEPT_NO=0030ANDENAMELIKE‘SMITH%’; !q :@9W Y(HSELECTCOUNT(*),SUM(SAL)FROMEMP
5、WHEREDEPT_NO=0020AND ENAMELIKE‘SMITH%’;&c8S {*I"a.I8zSELECTCOUNT(*),SUM(SAL)FROMEMPWHEREDEPT_NO=0030ANDENAMELIKE‘SMITH%’;-C)N!l)P;q-C 你可以用DECODE函数高效地得到相同结果:8~7k)@#e%m3[.o$q0o-_,^1U%U)M6d5~Sql代码6u6i*R*J8Z,O&p)S#L:?(L1.SELECTCOUNT(DECODE(DEPT_NO,0020,’X’,NULL))D
6、0020_COUNT, 1h3^(F `2
7、4^2. COUNT(DECODE(DEPT_NO,0030,’X’,NULL))D0030_COUNT, 2M!q6W)f"Q:`3. SUM(DECODE(DEPT_NO,0020,SAL,NULL))D0020_SAL, 6P#p-F0y+T&l*F3I+S/n3N4. SUM(DECODE(DEPT_NO,0030,SAL,NULL))D0030_SAL ,q4`,R%Q45C5.FROMEMPWHEREENAMELIKE‘SM
8、ITH%’; 5I%M$u!z7O7H5CSELECTCOUNT(DECODE(DEPT_NO,0020,’X’,NULL))D0020_COUNT,.J1h!w$e:o;m+y$? COUNT(DECODE(DEPT_NO,0030,’X’,NULL))D0030_COUNT,2I-g'M$y5@,];J SUM(DECODE(DEPT_NO,0020,SAL,NULL))D0020_SAL,$p;]$J8W&L/M;n SUM(DECODE(DEPT_NO,0030,SAL,NULL)
9、)D0030_SAL$V;E$^.e S0E9xFROMEMPWHEREENAMELIKE‘SMITH%’;/x1G*t*F;y&s#I6H6B%x0Q!J.r9g 类似的,DECODE函数也可以运用于GROUPBY和ORDERBY子句中. N+^4i9u&u&g,`#e+C,a/L/R/z3.删除重复记录*J(`&K9F4n.A)a 最高效的删除重复记录方法(因为使用了ROWID)*[4?3v/R6j E*J Q4b-v-G%PSql代码/T"
10、$l,o7u2D*f1.DELETEFROMEMPEWHERE
11、E.ROWID>(SELECTMIN(X.ROWID)FROMEMPXWHEREX.EMP_NO=E.EMP_NO); &G#l)S)Z*c,t,oDELETEFROMEMPEWHEREE.ROWID>(SELECTMIN(X.ROWID)FROMEMPXWHEREX.EMP_NO=E.EMP_NO);7T8C%i3T8l"[!c!F#r4v U5s6y:S7D#`/o)A#}-Q7M6u8R2H1e#[-K4.用TRUNCATE替代DELETE$v8p)d"m7r4O#P 当删除表中的记录时,在通常情况下,回滚段
12、(rollbacksegments)用来存放可以被恢复的信息,如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况),而当运用TRUNCATE时,回滚段不再存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源被调用,执行时间也会很短.3j!Z$W