资源描述:
《oracle查询优化改写技巧和案例(学习笔记)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、oracle查询优化改写技巧和案例(学习笔记)第一章1.4将空值转换成实际值函数coalesce(exp1,exp2,...) 返回第一个为非空的值,避免了返回空值;1.5查找满足多个条件的行用到or:只要达到其中一个条件就可以的; 查询所有的提成的员工:即提成不为空,commisNOT NULL;这个很好的例子; 用括号把多个条件给分隔开;1.8在where字句中引用别名的列; 即要引用别名的列时必须是一张表中的字段; select*from(salas工资,commas提成 fromemp) xwhere工资
2、>2000;1.9拼接列用“
3、
4、”把各列连起来员工的工作是:ename
5、
6、‘的工作是’
7、
8、job1.10在slect语句中使用条件逻辑即用case来解决:格式为 字段, case when then ; when then ; else ; end as 别名情景:当工资<2000元时,就返回“过低”,<4000就返回“过高”,复习考题:(P9)要按照工资档次统计人数;1.11限制返回的行数用rownum是依次对数据做出的标识,是所有的数据取出来后才能确定
9、其序号;rownum<=2而不能rownum=2;查询某个序号可以这样:select*from(selectrownumassn,emp.*fromemp)whererownum<=2) wheresn=2;1.12从表中随机返回n条记录先随机排序,再取数据(正确):selectempno,enamefrom(selectempno,enamefromemporderbydbms_random.value())whererownum<=3;先取数据再随机排序(错误):selectempno,enamefromemp where
10、rownum<=3 orderbydbms_random.value();1.13模糊查询通配符主要有“like"、"_"、"%"如果查询中包含通配符就要用到转义字符:select*fromvwherevnamelike'_like'ESCAPE '';第二章 给查询结果排序 2.1以指定的次序返回查询结果 ASC:升序排序,从小到大排序;desc:倒序排序,即从大到小; orderby3asc:表示按第三列排序:这种排序适用于该列取值不定时或者说经常改变的列,很方便,比如查询的列增加了,而我们只是排序第一列;2.2按多
11、个字段排序排序的字段要用","分开,比如:orderby Adesc,Basc;2.3按字符串排序用到了substr()函数;主要是运用了快速查找顾客的电话的尾号4的顺序;substr(phone_number,-4)表示后四位;2.4translate()函数 translate(expr,from_string,to_string):from_string和to_string以字符为单位,对应字符一一替换; 如果to_string为空,则返回空值;如果to_string对应的位置没有字符,删除from_string中列出的
12、字符将会被消掉; 运用:2.5按数字和字母混合字符串中的字母排序把重要的东西提取出来,次要的东西踢掉,这道题是对translate的运用;先构造视图createorreplaceview v asselectempno
13、
14、''
15、
16、enameasdatafromemp;selectdata,translate(data,'-0123456789','-')asenamefromvorderby2;2.6处理排序空值 在orderby 的后面加个NULLS FIRST或NULLSLAST;2.7根据条件不同列中的值来排序领导对工资
17、在1000到2000的感兴趣;selectempnoas编码,enameas姓名,salas工资fromempwheredeptmo=30orderbycasewhensal>=1000andsal<2000 then1else2end,3; 第三章 操作多个表(P要操作)2015/04/2917:003.1unionall与空字符串 空字符串不等于空值;3.2union与or 一般不用unionall,这样避免的重复的数据;(P25要复习) 为了消除bitmapconvert的影响:altersessionset"_b_t
18、ree_bitmap_plans"=false; 但有是用union或or会被忽略,从而出现错误;不过加入一个唯一标识后,即保证了正 确去重,又防止了不该发生的去重。还可以用rowid来解决union或or的去重问题;数据取自视图用的是rownum;createorrepla