zoukankan      html  css  js  c++  java
  • Oracle start with connect by prior 递归查询

    Oracle start with connect by prior 递归查询


    基本语法:

    selectfrom tablename
    where 条件1
    start with 条件2
    connect by 条件3(PRIOR);

    条件1:相当于基本的筛选数据

    条件2:递归查询起始条件

    条件3:连接条件,其中用PRIOR表示上一条记录的结果作为本次查询的条件,比如:

      CONNECT BY PRIOR id= parent_id;就是说上一条记录的id是本条记录的parent_id再进行查询(查子集);

      CONNECT BY id= PRIOR parent_id;就是说上一条记录的parent_id是本条记录的id再进行查询(查父集);


    进行实验说明:

    原始表数据:

    对应关系图:

    1.实验一:(查询自己及自己所有子集)

    SELECT DISTINCT ID,level
            FROM org
            where DELETEFLAG =0 and ENABLEFLAG = 0
            START WITH id = 1
            CONNECT BY PRIOR ID=PARENTID

    查询结果:

    可以看出,查询出id为1的所有子集与他自己,查询过程:第一次查询为:id=1的;第二次查询为:PARENTID=第一次查询的id;第三次查询为:PARENTID=第二次查询的id

    其中level可以看出树的层级

    2.实验二:(进一步验证实验一)

    SELECT DISTINCT ID,level
            FROM org
            where DELETEFLAG =0 and ENABLEFLAG = 0
            START WITH id = 10
            CONNECT BY PRIOR ID=PARENTID

    查询结果:

    查询出id为10的记录及其子集,并未查询其父集

    3.实验三:(仅查询子集)

    SELECT DISTINCT ID,level
            FROM org
            where DELETEFLAG =0 and ENABLEFLAG = 0
            START WITH parentid = 1
            CONNECT BY PRIOR ID=PARENTID

    查询结果:

    查询出id=1的子集,因为START WITH(初始条件)查询的是parentid  = 1 的记录

    4.实验四:(START WITH 后条件也可为多条件)

    SELECT DISTINCT ID,level
            FROM org
            where DELETEFLAG =0 and ENABLEFLAG = 0
            START WITH (id=10 or id=2 or id=280)
            CONNECT BY PRIOR ID=PARENTID

    查询结果:

    发现查询结果与实验三一致

    5.实验五:(查询自己及父集)

    SELECT DISTINCT ID,level
            FROM org
            where DELETEFLAG =0 and ENABLEFLAG = 0
            START WITH id = 270
            CONNECT BY ID = PRIOR PARENTID

    查询结果:

    查询出自己及父集

    6.实验六:(对查询结果 order by)

    SELECT DISTINCT ID,level
            FROM org
            where DELETEFLAG =0 and ENABLEFLAG = 0
            START WITH id = 1
            CONNECT BY PRIOR ID=PARENTID
            order by level

    查询结果:

    证明,可以对查询后结果进行相关操作

    7.实验七:(可以通过where条件筛选自己所需要的数据)

    SELECT DISTINCT ID,level
            FROM org
            where DELETEFLAG =0 and ENABLEFLAG = 0
            and level!=3 
            START WITH id = 1
            CONNECT BY PRIOR ID=PARENTID

    查询结果:

    证明我们可以通过where 条件查询我们所需要的数据


    结束

  • 相关阅读:
    Nim教程【七】
    Nim教程【六】
    博客园博客撰写工具【开源】(可以直接黏贴图片)
    Nim教程【五】
    Nim教程【四】
    Nim教程【三】
    Nim教程【二】
    Nim教程【一】
    开发人员面试题目分享(来看看不一样的面试题吧)【第二弹】
    基于.net开发chrome核心浏览器【七】
  • 原文地址:https://www.cnblogs.com/zktww/p/12419045.html
Copyright © 2011-2022 走看看