Oracle经典案例

来源:互联网 发布:网络棋牌源码 编辑:程序博客网 时间:2024/05/28 18:45

1.Oracle的行列转换:

l行列转换包括以下六种情况:
l*列转行 
l*行转列 
l*多列转换成字符串
l*多行转换成字符串
l*字符串转换成多列
*字符串转换成多行

主要用到decode,case , pivot,union all等方式进行实现


2. 递归算法:

l父子查询 
l子父查询 
l全量查询
实现菜单树形展示等作用

lstartwith...connect by prior子句用法connectby 是结构化查询中用到的,基本的语法是: 
selectlevel ,...from tablename start with 条件1
connect by 条件2 
where 条件3; 
l说明:
p   条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。 
     条件2 是连接条件,其中用PRIOR表示上一条记录,比如CONNECT BY PRIOR org_id = parent_id就是说上一条记录的org_id是本条记录的parent_id,即本记录的父亲是上一条记录。 
     条件3 是过滤条件,用于对返回的所有记录进行过滤。
Level是树形节点的伪列,标识该节点所处的级次,它是会随着层级关系的改变而改变的


3.含null排序的问题:

在Oracle中,

•在Order by 时缺省认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在最前,当涉及到多个字段排序时排序时,需要主要排序的规则
常规使用:case when ,decode , nvl 处理, 特殊使用nulls frist, nulls last 处理。

4. Oracle的分页查询:
l1.无ORDERBY排序的写法
l2.有ORDERBY排序的写法
l3.无ORDERBY排序的写法。(建议使用方法1代替)
l4.有ORDERBY排序的写法.(建议使用方法2代替)
l5.另类语法。(有ORDERBY写法)
l6.另类语法。(无ORDERBY写法)

例子:
SELECT *
FROM (Select ROWNUM ASROWNO, T.*
from k_task T
where Flight_datebetween to_date('20060501', 'yyyymmdd') and
to_date('20060731','yyyymmdd')
AND ROWNUM <= 10)TABLE_ALIAS
WHERETABLE_ALIAS.ROWNO >= 1;
注意 内侧的rownum 必须是从1开始!


原创粉丝点击