美文网首页
Oracle递归查询:使用prior实现树操作

Oracle递归查询:使用prior实现树操作

作者: 高桥my | 来源:发表于2021-07-04 23:36 被阅读0次

    一、简单解释

    oracle树查询的最重要的就是select…start with…connect by…prior语法了。依托于该语法,我们可以将一个表形结构的数据以树的顺序列出来。

    语法:

    select * from tableName

    start with  条件A   -- 开始递归的根节点,可多个条件

    connect  by prior  条件B  -- prior  决定查询的索引顺序

    where 条件 C

    二、使用方式

    1.简单查询(不加START WITH时)

     select t.empno,t.mgr,t.deptno ,level

      from emp t

      connect by prior t.empno=t.mgr

      order by level,t.mgr,t.deptno;

    不加START WITH时

    加上start with条件时

    2.向上查找(父=子)

    找到empno为7369的所有领导。

    select t.*,t.rowid from emp t

    start with t.empno = 7369      --从empno为7369的开始查找

    connect by prior t.mgr = t.empno;    --上一条数据(这里就是empno为7369)的mgr == 当前遍历这一条数据的empno(那么就会找到empno为7902的用户)

    向上查找

    3.向下查找(子=父)

    找到empno为7566的所有下属

    select t.*,t.rowid from emp t

    start with t.empno = 7566

    connect by prior t.empno = t.mgr; --注意:connect by  t.mgr =prior t.empno与左边写法含义一样

    向下查找

    三、基本语法

    start with :设置起点,省略后默认以全部行为起点。

    connect by [condition] :与一般的条件一样作用于当前列,但是在满足条件后,会以全部列作为下一层级递归(没有其他条件的话)。

    prior : 表示上一层级的标识符。经常用来对下一层级的数据进行限制。不可以接伪列。

    level :伪列,表示当前深度。

    connect_by_root() :显示根节点列。经常用来分组。

    connect_by_isleaf :1是叶子节点,0不是叶子节点。在制作树状表格时必用关键字。

    sys_connect_by_path() :将递归过程中的列进行拼接。

    nocycle , connect_by_iscycle : 在有循环结构的查询中使用。

    siblings : 保留树状结构,对兄弟节点进行排序

    来源:

    https://blog.csdn.net/tanggao1314/article/details/52652111?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162538763316780265474850%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162538763316780265474850&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-22-52652111.first_rank_v2_pc_rank_v29_1&utm_term=ORACLE%E9%80%92%E5%BD%92%E5%87%BD%E6%95%B0&spm=1018.2226.3001.4187

    https://blog.csdn.net/tanx17/article/details/108683534?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162538763316780269872688%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162538763316780269872688&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-5-108683534.first_rank_v2_pc_rank_v29_1&utm_term=ORACLE%E9%80%92%E5%BD%92%E5%87%BD%E6%95%B0&spm=1018.2226.3001.4187

    https://blog.csdn.net/qq_32392597/article/details/105773226?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162538763316780265474850%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162538763316780265474850&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-10-105773226.first_rank_v2_pc_rank_v29_1&utm_term=ORACLE%E9%80%92%E5%BD%92%E5%87%BD%E6%95%B0&spm=1018.2226.3001.4187

    相关文章

      网友评论

          本文标题:Oracle递归查询:使用prior实现树操作

          本文链接:https://www.haomeiwen.com/subject/uszvultx.html