1.对于表中行与行存在父子关系时,可以通过connect by查询方式,查询行与行之间的父子关系

select lpad('-',(level-1),'-')|| empno as tempno,
ename,mgr,level,
decode(level,1,1) as root,
decode(connect_by_isleaf,1,1) as leafnode
from emp
start with empno=7566
connect by (prior empno) = mgr
order by level;

除了level伪列外,connect_by_isleaf也是伪列,1表示没有子记录,0则相反

2.当需要把表中某一属性按照父子关系拼接起来,可以借助sys_connect_by_path

with x1 as
(select deptno,ename,row_number() over(partition by deptno order by ename) as rn from emp1)
select deptno,sys_connect_by_path(ename,',') as nameC from x1
where connect_by_isleaf =1
start with rn=1 connect by (prior deptno)= deptno and (prior rn)=rn-1;

3.对于树形查询结果排序,如果保持树结构的正确性非常关键,因此我们采用SIBLINGS关键字只对分支内部进行排序

select lpad('-',(level-1),'-')|| empno as tempno,
ename,mgr,level,
decode(level,1,1) as root,
decode(connect_by_isleaf,1,1) as leafnode
from emp1
start with empno=7566
connect by (prior empno) = mgr
order siblings by empno desc ;

对于非父子关系字段的过滤条件,需要为该字段的过滤条件做一个子查询,然后基于该子查询再进行树形查询。

4.上面几个查询都是从根往子节点查询,如何从子节点递归查询到根呢,如下所示

select ename,mgr,level
from emp1
start with empno=7902
connect by (prior mgr) = empno
order by level;

Oracle Sql优化之分层查询(connect by)的更多相关文章

  1. Oracle SQL优化[转]

    Oracle SQL优化 1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化 ...

  2. oracle sql 优化大全

    转自: http://panshaobinsb.iteye.com/blog/1718233 http://yulimeander.blog.sohu.com/115850824.html 最近遇到了 ...

  3. Oracle SQL优化进阶学习

    引言 对于下面的Oracle分页如何优化该段语句: SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM task_log order by ...

  4. Oracle SQL 优化原则(实用篇)

    由于SQL优化优化起来比较复杂,并且还受环境限制,在开发过程中,写SQL必须遵循以下几点原则: 1.Oracle 采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他Where ...

  5. oracle sql优化

    整理一下网上所看到sql优化方法 1.使用大写字母书写sql,因为oracle解释器会先将sql语句转换成大写后再解释 2    减少访问数据库的次数,多数情况下一条sql可以达到目的的,就不要使用多 ...

  6. Oracle SQL优化一(常见方法)

    1.表访问方式优化: a)普通表优先“Index Lookup 索引扫描”,避免全表扫描 大多数场景下,通过“Index Lookup 索引扫描”要比“Full Table Scan (FTS) 全表 ...

  7. oracle sql优化笔记

    oracle优化一般分为:1.sql优化(现在oracle都会根据sql语句先进行必要的优化处理,这种应该用户不大了,但是像关联和嵌套查询肯定是和影响性能的) A.oracle的sql语句的条件是从右 ...

  8. Oracle SQL优化器简介

    目录 一.Oracle的优化器 1.1 优化器简介 1.2 SQL执行过程 二.优化器优化方式 2.1 优化器的优化方式 2.2 基于规则的优化器 2.3 基于成本的优化器 三.优化器优化模式 3.1 ...

  9. Oracle SQL优化原则

    原文:http://bbs.landingbj.com/t-0-240353-1.html 1.选用适合的 ORACLE 优化器 2.访问 Table 的方式 3.共享SQL语句 共享的语句必须满足三 ...

随机推荐

  1. NOIP2010-普及组复赛-第一题-数字统计

    题目描述 Description 请统计某个给定范围[L, R]的所有整数中,数字 2 出现的次数. 比如给定范围[2, 22],数字 2 在数 2 中出现了 1 次,在数 12 中出现 1 次,在数 ...

  2. mnesia

    1.模式创建 mnesia:create_schema([node()|nodes()]).集群的节点之间创建模式 2.启动和停止 application:start(mnesia). applica ...

  3. 查询全国的省市信息<option>拼接

    //修改页面获取省市信息 function getProvinceUSER_AREA1(){ $.ajax({ type:'post', url:'<%=path%>/user/findU ...

  4. hdu 5584 gcd/lcm/数学公式

    input T 1<=T<=1000 x y output 有多少个起点可以走n(n>=0)步走到(x,y),只能从(x,y)走到(x,y+lcm(x,y))/(x+lcm(x,y) ...

  5. Jquery EasyUI datagrid后台数据表格生成及分页详解

    由于项目原因,网站后台需要对用户信息进行各种操作,有时还需要进行批量操作,所以首先需要将用户信息展示出来,查了不少资料.发现Jquery EasyUI确实是一个不错的选择,功能强大,文档也比较全面,而 ...

  6. leetcode383

    已知两个字符串,然后比较一个字符串是否来自另一个字符串,没有顺序要求. 简单题,用一个数组保存前一个字符串的每一个字符出现的次数,然后循环后一个字符串去检查,如果次数不够了,那么就返回false pu ...

  7. Chapter 1 First Sight——31

    I took notes carefully anyway, always looking down. 不论怎么样我都仔细的记着笔记,一直低着头. I couldn't stop myself fro ...

  8. Thrift项目Server端开发流程

    Thrift项目Server端开发流程 首先,先了解工程中所有包的功能(见下图) 该图为用户中心项目的目录结构,以下依次介绍. 1.     src/main/java com.framework:该 ...

  9. ldap基本命令

    前端数据如下: ### frontend.ldif ### dn: dc=ldap,dc=example,dc=com objectclass: top objectclass: dcObject o ...

  10. gets()

    C: #include <stdio.h>    //这个头文件包含gets()函数,这个函数在ISO/IEC 9899 2011(C11)标准中被移除 int main(void) { ...