随笔分类 -  数据库开发

数据库开发技术总结
SQL语句优化学习笔记二
摘要:1.内联视图:是from语句后面的子查询。一般会进行视图合并,如果要禁止视图合并需要用/* +no_merge */提示,或者当子查询中含有order by、聚集函数、集合操作符, rownum等时。2.谓语前推:用来将谓语从一个内含查询块中应用到不可合并的查询块中。目标就是允许索引的使用或者让其他对于数据集的筛选在查询中能够尽快的进行。使用rownum会禁止谓语 前推。所以使用rownum需要十分小心。 阅读全文

posted @ 2013-05-05 21:22 原想 阅读(112) 评论(0) 推荐(0)

count(1),count(*),count(rowid)
摘要:下面是三个语句的测试结果,测试表的数据为25341223行(千万级)SQL> alter system flush shared_pool;System alteredExecuted in 0.047 secondsSQL> select count(1) from thqlog;COUNT(1)----------25341223Executed in 12.297 secondsSQL> alter system flush shared_pool;System alteredExecuted in 0.062 secondsSQL> select count(* 阅读全文

posted @ 2013-05-04 09:48 原想 阅读(436) 评论(0) 推荐(0)

窗口函数(一)
摘要:1 --窗口函数简介 2 --用途:用于计算一定记录范围内,一定值域内,一定时间内的累计和或者移动平均值 3 --能与窗口函数搭配的聚合函数为:sum avg min max first_value last_value 4 -- count stddev variance 5 --实例:1,计算1到12个月的累计和 6 --计算累积销量,注意开窗语句为前面所有行到当前行 7 select a.month, 8 sum(a.amount), 9 sum(sum(a.amount)) over(order b... 阅读全文

posted @ 2012-11-12 22:36 原想 阅读(154) 评论(0) 推荐(0)

分析函数(二)
摘要:1 --NTILE(n)函数用于将函数等分为N部分,并为每一部分分配一个编号 2 --下面是实例: 3 --将分组后的数据等分为十个组,并展示出返回数据的分组情况 4 select * 5 from (select a.prd_type_id, 6 a.month, 7 sum(a.amount), 8 ntile(10) over(order by sum(a.amount) desc) as tile 9 from all_sales a10 where a... 阅读全文

posted @ 2012-11-12 22:11 原想 阅读(147) 评论(0) 推荐(0)

Group分组及其扩展总结(四)
摘要:1 --Group_ID:用于消除Group By子句中的返回的重复记录,Group by子句不接受任何参数2 --如果某个特定的分组重复n次,那么GROUP_ID返回0—n-1之间的一个整数3 --下面是实例:4 select a.division_id, a.job_id, avg(a.salary), group_id()5 from employees2 a6 group by a.division_id, rollup(a.division_id, a.job_id)7 having group_id() = 0 /*用于消除重复*/8 order by a.divi... 阅读全文

posted @ 2012-11-04 16:06 原想 阅读(154) 评论(0) 推荐(0)

Group分组及其扩展总结(三)
摘要:1 --1.Grouping_id 2 --Grouping_id借助having子句可以对记录进行过滤 3 --将不包含小计或者总计的记录过滤掉 4 --Grouping_id可以返回一列或者多列,返回Grouping位向量的十进制值 5 select grouping(a.division_id), 6 grouping(a.job_id), 7 grouping_id(a.division_id, a.job_id), 8 sum(a.salary) 9 from employees2 a10 group by cube(a.divisi... 阅读全文

posted @ 2012-11-04 16:00 原想 阅读(221) 评论(0) 推荐(0)

Group分组及其扩展总结(二)
摘要:1 --1.Grouping 函数可以接受一列,返回0或者1 如果列值为空那么返回1 否则返回0 2 select grouping(a.division_id),a.division_id, sum(a.salary) 3 from employees2 a 4 group by rollup(a.division_id) 5 order by a.division_id 6 7 运行结果为: 8 GROUPING(A.DIVISION_ID) DIVISION_ID SUM(A.SALARY) 9 1 0 BUS 161000010 2 ... 阅读全文

posted @ 2012-11-04 11:43 原想 阅读(193) 评论(0) 推荐(0)

Group分组及其扩展总结(一)
摘要:1 --1.单独使用Group By子句:每个分组返回一条记录2 select a.division_id, sum(a.salary)3 from employees2 a4 group by a.division_id5 order by a.division_id运行结果:1 DIVISION_ID SUM(A.SALARY)2 1 BUS 16100003 2 OPE 13200004 3 SAL 49360005 4 SUP 10150001 --2.扩展子句Rollup: 每个分组返回一条小计,最后返回一条总计2 ... 阅读全文

posted @ 2012-11-04 10:58 原想 阅读(446) 评论(0) 推荐(0)

oracle中case表达式
摘要:1 --简单case表达式 2 --case when 表达式用法1 3 --case 表达式 4 -- when exp1 then rslt ... 5 select a.product_id, 6 a.product_type_id, 7 case a.product_type_id 8 when 1 then 'Book' 9 when 2 then 'Video'10 when 3 then 'DVD'11 when 4 then 'CD'12 else 'M... 阅读全文

posted @ 2012-11-03 22:43 原想 阅读(498) 评论(0) 推荐(0)

Oracle中Transate函数的使用
摘要:1 --translate(x, from_string, to_string) 2 --函数在x中查找from_string中的字符,并替换成to_string中对应的字符 3 --下面是使用translate函数的实例: 4 5 --编码 6 select translate('SECRET MESSAGE: MEET ME IN THE PARK', 7 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ', 8 'EFGHIJKLMNOPQRSTUVWXYZA... 阅读全文

posted @ 2012-11-03 22:14 原想 阅读(573) 评论(0) 推荐(0)

Oracle中集合操作符
摘要:下面是Oracle中集合操作符实例(1)Union all1 --Union all 操作符2 select a.product_id, a.product_type_id, a.name3 from products a4 union all5 select b.prd_id, b.prd_type_id, b.name 6 from more_products b 7 order by 1(2)Uinon 操作符1 --Union 操作符2 select a.product_id, a.product_type_id, a.name3 from products a4 un... 阅读全文

posted @ 2012-11-03 21:05 原想 阅读(1617) 评论(0) 推荐(0)

Oracle中NULL的定义及其相关处理办法
摘要:1.定义 在oracle数据库中,NULL表示未知值,既不是空值也不是0,当插入数据时,如果没有为特定列提供值,并且该列没有原先设定的默认值,那么其结果为NULL.尤其要注意的是在算术表达 式中如果出现NULL,那么其结果就是NULL,这会在很多时候造成应用程序输出不符合预想结果.2.处理办法(1)使用NVL(exp1,exp2)函数 该函数等价于if exp1 is NULL then result = exp2 else result = exp1(2)使用nvl2(exp1,exp2,exp3) 该函数等价于if exp1 is NULL then result = exp3 else 阅读全文

posted @ 2012-10-22 10:49 原想 阅读(457) 评论(0) 推荐(0)

oracle中LPAD和RPAD函数的使用方法
摘要:今日学习遇到一个不熟悉的函数LPAD,查了一下文档,将其用法总结如下:Lpad Function:在PL/SQL中用于往源字符串的左侧填充一些字符。函数参数:lpad( string1, padded_length, [ pad_string ] )其中string1:源字符串padded_length:最终返回的字符串的长度,如果最终返回的字符串的长度比源字符串的小,那么此函数实际上对源串进行截断处理pad_string:用于填充的字符,可以不填,默认为空字符下面是几个实例:1 --返回值长度大于源字符串长度,将进行填充2 select lpad('zhanglt',10,& 阅读全文

posted @ 2012-10-22 10:47 原想 阅读(251) 评论(0) 推荐(0)

oracle中常用的分析函数总结
摘要:今天在学习《oracleSQL高级编程》,看到了比较全的分析函数列表,故记于此。编号函数功能1LAG访问分区或者数据集中之前的一行2LEAD访问分区或者数据集中之后的一行3First_Value访问分区或者数据集中第一行4Last_Value访问分区或者数据集中最后一行5Nth_Value访问分区或者结果集中任意一行6Rank将数据行值按照排序后的的顺序进行排序,有并列的情况的排名值将跳过7Dense_Rank将数据行值按照排序后的顺序进行排序,有并列值的情况排名值不会跳过8row_number()对行排序并为每一行分配一个唯一的编号,这是一个非确定的函数 阅读全文

posted @ 2012-10-22 10:46 原想 阅读(227) 评论(0) 推荐(0)

利用CONNECT BY实现二进制到十进制的转换
摘要:CONNECT BY可用于生成序列,下面的函数就是利用CONNECT BY的这一特性实现的二进制到十进制的转行函数。 1 create or replace function bintodec(bstr in varchar2) return varchar2 is 2 -- ******************************************************** 3 --* 文件名:BinToDec.sql 4 -- * 版本:1.0 5 -- * 用途:利用connect by实现二进制向十进制的转换 6 -- * 参数: 7 -- * bS... 阅读全文

posted @ 2012-10-22 10:45 原想 阅读(173) 评论(0) 推荐(0)

如何区分SQL语句中的Where和Group by子句
摘要:Where子句和Group By子句的区别主要如下:1、Where子句用于返回的单行进行限制2. Group by子句用于对返回的行组进行限制如果Group by 子句中不是对行组进行限制,而是进行单行限制那么应该尽量转换为WHERE子句的条件,这也是SQL优化的内容之一。下面是一个例子:1 select t.product_type_id, avg(t.price)2 from products t3 where t.price < 154 group by t.product_type_id5 having avg(t.price) > 136 order by t.produ 阅读全文

posted @ 2012-10-22 10:44 原想 阅读(486) 评论(0) 推荐(0)

Trunc函数的使用实例
摘要:Trunc函数对于日期的操作和小数点左边截位的使用实例1 select Trunc(sysdate, 'YYYY'), --本年第一天2 Trunc(sysdate, 'MM'), --本月第一天3 Trunc(sysdate, 'day') --本周第一天4 from dual;5 6 select trunc(123.2,-2) --从左边开始截位7 from dual; 阅读全文

posted @ 2012-10-16 08:44 原想 阅读(833) 评论(0) 推荐(0)

两条SQL语句优化的规则
摘要:下面是两条平时接触频率很高的SQL语句优化规则,但是自己写SQL语句时经常漏下,因此摘录:1、执行连接时使用完全限定的表引用,避免数据库去搜索哪一列属于哪个表 在查询中包含表别名,并在查询中使用每个表的别名,这样数据库就不用检索每一列属于哪个表从而提高语句的执行效率。 下面是实例:1 select p.name, pt.name, description, price2 from products p, product_types pt3 where p.product_type_id = pt.product_type_id4 --0.093秒5 6 select p.name, pt... 阅读全文

posted @ 2012-10-14 21:11 原想 阅读(189) 评论(0) 推荐(0)

SQL*PLUS几个有用的命令
摘要:SQL*PLUS中常用命令用途与实例命令 说明 A[PPEND] text将text附加到当前行之后C[HANGE]/old/new将当前行中的old替换为newDEL x删除第X行L[IST] x列出第X行x把第x行作为当前行SPOOL filename将当前缓冲区内容输出到文件中SPOOL OFF输出结束实例SQL> select * 2 from customers 3 where customer_id=1 4 ;未选定行SQL> 3 3* where custome... 阅读全文

posted @ 2012-10-13 22:33 原想 阅读(150) 评论(0) 推荐(0)