Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。
(
ID NUMBER,
NAME VARCHAR2(100 BYTE),
PID NUMBER DEFAULT 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');
start with id=1
connect by prior id = pid
start with id=5
connect by prior pid = id
对于oracle进行简单树查询(递归查询)
DEPTID | PAREDEPTID | NAME |
NUMBER | NUMBER | CHAR (40 Byte) |
部门id | 父部门id(所属部门id) | 部门名称 |
通过子节点向根节点追朔.
- 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
select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid
通过根节点遍历子节点.
- 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
select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid
可通过level 关键字查询所在层次.
- 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
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 后面所放的字段是有关系的,它指明了查询的方向。
练习: 通过子节点获得顶节点
- 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子句递归查询一般用于一个表维护树形结构的应用。相关推荐
- java递归查询无限极分类_sqlserver实现树形结构递归查询(无限极分类)的方法
SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 百度百科 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE ...
- java递归查询无限极分类_sqlserver实现树形结构递归查询(无限极分类)
SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 百度百科 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE ...
- ORACLE进阶(十)start with connect by 实现递归查询
文章目录 一.前言 二.树结构的描述 三.关于 PRIOR 四.定义查找起始节点 五.使用 LEVEL 六.节点和分支的裁剪 七.排序显示 一.前言 在工作中,查看到类似于如下的SQL语句: sele ...
- Oracle中start with...connect by子句的用法
connect by 是结构化查询中用到的,其基本语法是: select - from tablename start with 条件1 connect by 条件2 where 条件3; 例: se ...
- oracle11.2g递归查询(树形结构查询)
转自: 一 二 简单语法介绍 一.树型表结构: 节点ID 上级ID 节点名称 二.公式: select 节点ID,节点名称,level from 表 connect by prior 节点ID=上级节 ...
- 还在用递归查询 MySQL 的树形结构吗?教你一种更好的解决方案!
点击关注公众号,实用技术文章及时了解 来源:juejin.cn/post/7076079848824766494 通常树形结构的存储,是在子节点上存储父节点的编号来确定各节点的父子关系,例如这样的组织 ...
- mysql用于删除表中数据的关键字是_MySQL-删除数据(DELECT)
数据库备份介绍: 数据库一旦删除数据,它就会永远消失. 因此,在执行DELETE语句之前,应该先备份数据库,以防万一要找回删除过的数据. MySQL提供了非常有用的工具,用于在服务器上本地备份或转储M ...
- oracle connect by prior 树形结构
为了更好的查询一个树状结构的表,在Oracle的PL/SQL中提供乐一个诱人的特性--CONNECT BY子句.它大大的方便了我们查找树状表:遍历一棵树.寻找某个分支--,但还是存在一些不足.在Ora ...
- 带你读AI论文丨用于细粒度分类的Transformer结构—TransFG
摘要:本文解读了<TransFG: A Transformer Architecture for Fine-grained Recognition>,该论文针对细粒度分类任务,提出了对应的 ...
最新文章
- DAY4-打卡第四天-2018-1-12
- 翻译: Oralce官方文档-- Data Blocks, Extents, and Segments
- linux安装icc步骤,怎麼安装不到 icc?
- dnse 2.0音效厉害还是full sound厉害点呢?谢谢!!
- 会计基础第二次模拟试题(1)
- javascript 中的面向对象实现 如何封装
- jQuery 笔记目录
- 【数据结构笔记17】集合的表示、双亲表示法、并查集、集合的并运算
- 骆驼壳修改服务器,【电视直播】发烧友TV,骆驼壳导入直播源教程,打造个人专属永久盒子软件,你们想看的这都有!...
- 机电工程学院互联网+特色专业17级顶岗实习欢送会​圆满落幕
- 放弃有道词典和有道云笔记
- php sqlserver 日期转字符串,sqlserver 时间(datetime)转换成字符串
- Android常用内存优化方式整理
- 微信小程序使用html2wxml渲染HTML或Markdown文本
- android sd卡名称,Android系统中SD卡各文件夹名称及功能详解
- 深度学习之 imgaug (图像增强)学习笔记
- pandas批量拆分、合并EXCEl
- spring中使用Aspectj进行切面编程
- 每日一练20210426
- 微信小程序中的本地存储