Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。
创建示例表:
CREATE TABLE TBL_TEST
(
  ID    NUMBER,
  NAME  VARCHAR2(100 BYTE),
  PID   NUMBER                                  DEFAULT 0
);
插入测试数据:
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('1','10','0');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('2','11','1');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('3','20','0');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('4','12','1');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('5','121','2');
从Root往树末梢递归
select * from TBL_TEST
 start with id=1
 connect by prior id = pid
从末梢往树ROOT递归
select * from TBL_TEST
 start with id=5
 connect by prior pid = id
=====

对于oracle进行简单树查询(递归查询)

DEPTID PAREDEPTID NAME
NUMBER NUMBER CHAR (40 Byte)
部门id 父部门id(所属部门id) 部门名称

通过子节点向根节点追朔.

Sql代码
  1. select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid
Sql代码  
  1. select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid
 select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid 

通过根节点遍历子节点.

Sql代码
  1. select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid
Sql代码  
  1. select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid
select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid 

可通过level 关键字查询所在层次.

Sql代码
  1. select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid
Sql代码  
  1. select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid
select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid 

再次复习一下:start with ...connect by 的用法, start with 后面所跟的就是就是递归的种子

递归的种子也就是递归开始的地方 connect by 后面的"prior" 如果缺省:则只能查询到符合条件的起始行,并不进行递归查询;

connect by prior 后面所放的字段是有关系的,它指明了查询的方向

练习: 通过子节点获得顶节点

Sql代码
  1. select FIRST_VALUE(deptid) OVER (ORDER BY LEVEL DESC ROWS UNBOUNDED PRECEDING) AS firstdeptid from persons.dept start with deptid=76 connect by prior paredeptid=deptid

====这种方法只是当表里就有一颗树,多棵树怎么办?

Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。相关推荐

  1. java递归查询无限极分类_sqlserver实现树形结构递归查询(无限极分类)的方法

    SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 百度百科 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE ...

  2. java递归查询无限极分类_sqlserver实现树形结构递归查询(无限极分类)

    SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 百度百科 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE ...

  3. ORACLE进阶(十)start with connect by 实现递归查询

    文章目录 一.前言 二.树结构的描述 三.关于 PRIOR 四.定义查找起始节点 五.使用 LEVEL 六.节点和分支的裁剪 七.排序显示 一.前言 在工作中,查看到类似于如下的SQL语句: sele ...

  4. Oracle中start with...connect by子句的用法

    connect by 是结构化查询中用到的,其基本语法是: select - from tablename start with 条件1 connect by 条件2 where 条件3; 例: se ...

  5. oracle11.2g递归查询(树形结构查询)

    转自: 一 二 简单语法介绍 一.树型表结构: 节点ID 上级ID 节点名称 二.公式: select 节点ID,节点名称,level from 表 connect by prior 节点ID=上级节 ...

  6. 还在用递归查询 MySQL 的树形结构吗?教你一种更好的解决方案!

    点击关注公众号,实用技术文章及时了解 来源:juejin.cn/post/7076079848824766494 通常树形结构的存储,是在子节点上存储父节点的编号来确定各节点的父子关系,例如这样的组织 ...

  7. mysql用于删除表中数据的关键字是_MySQL-删除数据(DELECT)

    数据库备份介绍: 数据库一旦删除数据,它就会永远消失. 因此,在执行DELETE语句之前,应该先备份数据库,以防万一要找回删除过的数据. MySQL提供了非常有用的工具,用于在服务器上本地备份或转储M ...

  8. oracle connect by prior 树形结构

    为了更好的查询一个树状结构的表,在Oracle的PL/SQL中提供乐一个诱人的特性--CONNECT BY子句.它大大的方便了我们查找树状表:遍历一棵树.寻找某个分支--,但还是存在一些不足.在Ora ...

  9. 带你读AI论文丨用于细粒度分类的Transformer结构—TransFG

    摘要:本文解读了<TransFG: A Transformer Architecture for Fine-grained Recognition>,该论文针对细粒度分类任务,提出了对应的 ...

最新文章

  1. DAY4-打卡第四天-2018-1-12
  2. 翻译: Oralce官方文档-- Data Blocks, Extents, and Segments
  3. linux安装icc步骤,怎麼安装不到 icc?
  4. dnse 2.0音效厉害还是full sound厉害点呢?谢谢!!
  5. 会计基础第二次模拟试题(1)
  6. javascript 中的面向对象实现 如何封装
  7. jQuery 笔记目录
  8. 【数据结构笔记17】集合的表示、双亲表示法、并查集、集合的并运算
  9. 骆驼壳修改服务器,【电视直播】发烧友TV,骆驼壳导入直播源教程,打造个人专属永久盒子软件,你们想看的这都有!...
  10. 机电工程学院互联网+特色专业17级顶岗实习欢送会​圆满落幕
  11. 放弃有道词典和有道云笔记
  12. php sqlserver 日期转字符串,sqlserver  时间(datetime)转换成字符串
  13. Android常用内存优化方式整理
  14. 微信小程序使用html2wxml渲染HTML或Markdown文本
  15. android sd卡名称,Android系统中SD卡各文件夹名称及功能详解
  16. 深度学习之 imgaug (图像增强)学习笔记
  17. pandas批量拆分、合并EXCEl
  18. spring中使用Aspectj进行切面编程
  19. 每日一练20210426
  20. 微信小程序中的本地存储

热门文章

  1. 汉字转html实体符号js_js转html实体
  2. (软件工程复习核心重点)第六章实现和测试-第七节:黑盒测试
  3. LeetCode 605 种花问题
  4. USACO-Section2.2 Preface Numbering
  5. 企业安全建设之自动化代码扫描(代码审计)
  6. 浅谈渗透测试之前期信息搜集
  7. twisted系列教程十四— pre-fireed deferred
  8. twisted系列教程十一 — 一个twisted 的服务端
  9. 【搜索引擎】全文索引数据结构和算法
  10. 【代码笔记】Web-HTML-列表