oracle树形sql查询实例分析
 
通过此SQL语句 
[sql]
select  * from tree  
 查看原始数据如下:
 

 
我们要想得到如下的一个树形查询结果如下图所示
(包含 ROOT, LEVEL, IS_LEAF,  PATH 四个字段):
 

 
可执行如下SQL语句:
[sql]
select connect_by_root(child_col) root, level ,
decode(connect_by_isleaf,0,'No',1,'Yes') is_leaf, sys_connect_by_path(child_col,'/') path
from tree
start with parent_col is null connect by prior child_col=parent_col;
 
[sql]
树形查询的重点在于  start with ...  connect by prior .... 语句  
[sql]
以及 connect_by_root ,connect_by_isleaf,sys_connect_by_path这三个函数,
decode是一般常用的函数。  
 
<转:http://www.2cto.com/database/201205/131591.html>
 
 
=========================================================================
1、树形SQL结构
select
connect by {prior col1 = col2 || col1 = prior col2 }
[start with ]

connect by子句:指定父行和子行的关系。说明数据按照层次顺序检索,并将数据连入树形结构关系中

prior运算符:引用父行。必须放在连接关系的两列中某一列的前面,从而确定查找顺序是自上而下还是自下而上,连接关系中,可使用列名、列表达式

( prior被放置于等号前后的位置,决定着查询时的检索顺序
    置于等号前面,由父节点向子节点方向检索;置于等号后面,则从子节点向父节点方向检索)

start with 子句:为可选项,用于指定查询的根行。若省略,则表示所有满足条件的行作为根节点

(不但可以从根节点开始,而且可以定义任何节点为起始节点
    start with可指定一个或多个根节点)

2、版本新特性

在10g又增加了几个新的特性,增强了connect by子句。

从9i开始,可通过sys_connect_by_path函数实现从父节点到当前行内容以”path“或者层次元素列表的形式显示出来。sys_connect_by_path(child,'/')

connect_by_root:用在列名之前返回当前层的根节点(最高级节点的内容)

connect_by_isleaf:来判断当前行是不是叶子,如果是叶子就会在伪列中显示1

connect_by_iscycle:10g中增加对树中环状循环的处理;一旦数据中出现了循环记录(如:两个节点互为对方父节点),在10g以前版本的数据库中会错误提示”ora-01436。。“,只要指定nocycle可避免报错,且通过connect_by_iscycle属性就知道哪些节点产生了循环,如果出现循环,connect_by_iscycle伪列显示为1,否则显示为0。

===============================================================

相关实例:

organization、district是多对多关系,org_dis是中间表。

要查出机构下的所有城市,城市用","分隔

 select t.orgid,
MAX(substr(sys_connect_by_path(t.name, ','), 2)) as city_name
from (select do.id_organization orgid,
d.name as name,
row_number() over(partition by do.id_organization order by d.name desc) rn
from district d, dis_org do
where d.id_district = do.id_district) t
START WITH rn = 1
CONNECT BY rn = PRIOR rn + 1
AND orgid = PRIOR orgid
GROUP BY orgid

查询结果:

oracle 树形SQL的更多相关文章

  1. Oracle 树形SQL语句,SYS_CONNECT_BY_PATH 函数

    转一个SYS_CONNECT_BY_PATH 函数的例子.推断原表应该是这样: Child                        Parent ------------------------ ...

  2. 整理oracle 树形查询

    注:本文参考了<整理oracle 树形查询> sql树形递归查询是数据库查询的一种特殊情形,也是组织结构.行政区划查询的一种最常用的的情形之一.下面对该种查询进行一些总结: create ...

  3. MySql/Oracle树形结构查询

    Oracle树形结构递归查询 在Oracle中,对于树形查询可以使用start with ... connect by select * from treeTable start with id='1 ...

  4. MySQL、Oracle和SQL Server的分页查询语句

    假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql.Oracle和SQL Server分页查询student表. 1.Mysql的分页查询: SELECT * FROM s ...

  5. Datatypes translation between Oracle and SQL Server

    Datatypes translation between Oracle and SQL Server part 1: character, binary strings Datatypes tran ...

  6. Oracle经典SQL

    最近本人整理了一些Oracle sql,现分享给大家,后续还会更新.如果有错误的地方,请指正,共同学习.贴上去的sql都是我测试过的,大家可以粘贴在自己的电脑上试试. 1.查询部门的名称,及最低收入雇 ...

  7. Oracle 数据库SQL性能查看

    作为一个开发/测试人员,或多或少都得和数据库打交道,而对数据库的操作归根到底都是SQL语句,所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作.下面简单介绍下一些查看 ...

  8. 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)

    基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编   ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...

  9. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

随机推荐

  1. docker镜像、容器

    第一部分:Docker镜像的基本知识 1.1 什么是Docker镜像 从整体的角度来讲,一个完整的Docker镜像可以支撑一个Docker容器的运行,在 Docker容器运行过程中主要提供文件系统视角 ...

  2. Unity3D研究院编辑器之Editor的GUI的事件拦截

    OnGUI是Unity上一个时代的UI系统,而现在运行时的UI系统已经被UGUI取代,但是Editor的UI还是在用老的这一套GUI系统.比如unity编辑器里的所有窗口,布局,按钮,拖动条.滚动等等 ...

  3. SqlBulkCopy 批量插入数据库

    /// <summary> /// 批量插入 注:DT的tableName为要更新的数据库表名,DT的列名和数据库一致 /// </summary> /// <param ...

  4. Axure轮播图

    制作步骤如下: 1.新建一个动态面板,并添加几个动态面板状态(tab) 2.在所建的几个动态面板状态中添加要显示的每个广告的图片和相对应的代表第几个广告的数字. 3.添加页面交互事件.添加事件是在页面 ...

  5. Consul

    1. 什么是consul? 是一个服务管理软件. 支持多数据中心下,分布式高可用的,服务发现和配置共享. consul支持健康检查,允许存储键值对. 一致性协议采用 Raft 算法,用来保证服务的高可 ...

  6. 转载:使用sklearn做单机特征工程

    目录 1 特征工程是什么?2 数据预处理 2.1 无量纲化 2.1.1 标准化 2.1.2 区间缩放法 2.1.3 标准化与归一化的区别 2.2 对定量特征二值化 2.3 对定性特征哑编码 2.4 缺 ...

  7. xshell 5连接linux服务器的技巧

    1.用sttp 方式连接服务器,命令识别不了,用ssh方式才能有效

  8. BI案例:某通信企业综合报表和决策分析系统实施案例

    业务需求 某家位列国内五大电信运营商之列的通信公司(以下简称“通信公司”)在多年的运营过程中,积累了大量的业务数据,分散在各个运营系统中(计费系统.九七工程.网管系统等).这些系统主要是面向公司的日常 ...

  9. window7 下 安装 apache24(httpd-2.4.10-x86-r2)加 php5.6(php-5.6.4-Win32-VC11-x86)加yaf(php_yaf-2.3.3-5.6-ts-vc11-x86)整合

    window7 下 安装 apache24(httpd-2.4.10-x86-r2)加 php5.6(php-5.6.4-Win32-VC11-x86)加yaf(php_yaf-2.3.3-5.6-t ...

  10. JDBC Driver

    Infomix Driver: com.informix.jdbc.IfxDriver JDBC URL : jdbc:informix-sqli://<host>:<port> ...