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;
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是树形节点的伪列,标识该节点所处的级次,它是会随着层级关系的改变而改变的
条件2 是连接条件,其中用PRIOR表示上一条记录,比如CONNECT BY PRIOR org_id = parent_id就是说上一条记录的org_id是本条记录的parent_id,即本记录的父亲是上一条记录。
条件3 是过滤条件,用于对返回的所有记录进行过滤。
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开始!