Oracle树形结构的sql语句

ORACLE提供了一种树形结构用来实现层次查询:

  •     START WITH :指定记录是根节点的条件。根节点可以有多个。
  •     CONNECT BY :指定记录之间是父节点和子节点关系的条件。查找出含有子节点的父节点的条件

  •     PRIOR :指定父节点记录的引用。
  •     SIBLINGS :指定树的排序。同一父节点下的兄弟节点的顺序。


语法:

    SELECT 。。。START WITH condition CONNECT BY condition;

Oracle使用树状结构的目的是:

1.用二维表的形式记录树状结构

2.查询二维表来构造树状结构,一般都是根据一个对象向上查询查出它所有的祖先,根据一个对象向下查询查出它所有的子孙

3.树状结构的特点就是一个子只有一个父,一个父可以有多个子。那只要每一个对象知道了他的父对象,就可以手动的构造出树状结构。也就是说,有多少个对象在二维表中就需要多少行,每一个对象都有一个指出它的父对象是字段。

树在数据库表中的存储结构,如下:

[sql]  view plain  copy
  1. create table TREE  (  
  2.    ID                   NUMBER                          not null,    //主键  
  3.    PID                  NUMBER                          not null,    //父节点id  
  4.    ORDER_ID             NUMBER                          not null,    //排序id  
  5.    NODE_NAME            VARCHAR2(100)                   not null,    //节点名称  
  6.    constraint PK_TREE primary key (ID)  
  7. );  

实例sql语句如下:

[html]  view plain  copy
  1. SELECT * FROM tree
  2. START WITH pid = 0
  3. CONNECT BY PRIOR id = pid 
  4. ORDER SIBLINGS BY order_id  

查询出来的结果就是按树排序的记录集。

注意:

    1.先要确定查询哪个对象的祖先和子孙

            这要用到START WITH condition,只要满足条件的行,都可以做为查询的对象,也就是说,在一个查询中可以查询多个对象的祖先和子孙

    2.再确定对象的字段和父对象的字段,向上查询还是向下查询
            CONNECT BY prior id = p_id        对象字段为id,父对象字段为p_id,向下查询

            CONNECT BY id = prior p_id        对象字段为id,父对象字段为p_id,向上查询




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值