Oracle中递归查询(START WITH……CONNECT BY……)

server/2024/10/21 6:56:39/

一、基本语法

OracleSTART WITH……CONNECT BY……一般用来查找存在父子关系的数据,也就是树形结构的数据。

SELECT * FROM TABLE WHERE 条件3 START WITH 条件1 CONNECT BY 条件2;
  • start with [condition]:设置起点,用来限制第一层的数据,或者叫根节点数据;以这部分数据为基础来查找第二层数据,然后以第二层数据查找第三层数据以此类推。省略后默认以全部行为起点。

  • connect by [condition] :用来指明在查找数据时以怎样的一种关系去查找;比如说查找第二层的数据时用第一层数据某个字段进行匹配,如果这个条件成立那么查找出来的数据就是第二层数据,同理往下递归匹配。

  • prior : 表示上一层级的标识符。经常用来对下一层级的数据进行限制。不可以接伪列。prior在等号前面和后面,查询的数据是不一样的

  • level :伪列(关键字),代表树形结构中的层级编号(数字序列结果集),这个必须配合connect by使用,和rownum是同等效果。

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

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

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

  • nocycleconnect_by_iscycle:在有循环结构的查询中使用。

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

二、数据列表展示

2.1 向下查找

查询以organ_id为2开始的节点的所有直属节点:

select t.organ_id, t.parent_id, t.organ_abbr,levelfrom tem_organ_0619 tstart with t.organ_id = 2
connect by prior t.organ_id = t.parent_idorder by t.organ_id;

在这里插入图片描述

不设置开始节点:

select t.organ_id, t.parent_id, t.organ_abbr,levelfrom tem_organ_0619 t-- start with t.organ_id = 2
connect by prior t.organ_id = t.parent_idorder by t.organ_id;

在这里插入图片描述

2.2 向上查找

select t.organ_id, t.parent_id, t.organ_abbr,levelfrom tem_organ_0619 tstart with t.organ_id = 20401
connect by  t.organ_id = prior t.parent_idorder by t.organ_id;

在这里插入图片描述

2.3 level伪列的使用,格式化层级

select t.organ_id, t.parent_id, lpad(' ',level*4,' ')||t.organ_abbr organ_abbr,levelfrom tem_organ_0619 tstart with t.organ_id = 2
connect by  t.organ_id = prior t.parent_idorder by t.organ_id;

在这里插入图片描述

2.4 connect_by_root查找根节点

select t.organ_id, t.parent_id, lpad(' ',level*4,' ')||t.organ_abbr organ_abbr,level ,connect_by_root t.organ_idfrom tem_organ_0619 tstart with t.organ_id = 2
connect by  t.organ_id = prior t.parent_idorder by t.organ_id;

在这里插入图片描述

2.5 connect_by_isleaf是否是叶子节点

select t.organ_id, t.parent_id, lpad(' ',level*4,' ')||t.organ_abbr organ_abbr,level ,connect_by_root t.organ_id, connect_by_isleaffrom tem_organ_0619 tstart with t.organ_id = 2
connect by  t.organ_id = prior t.parent_idorder by t.organ_id;

在这里插入图片描述

2.6 其他

select t.organ_id, t.parent_id, lpad(' ',level*4,' ')||t.organ_abbr organ_abbr,level 层级,sys_connect_by_path(t.organ_id, '<-') 合并层次,PRIOR t.organ_id 父节点, connect_by_root t.organ_id 根节点, decode(connect_by_isleaf, 1, '是', '否') 是否子节点, decode(connect_by_isleaf, 1, t.organ_id, '') 子节点from tem_organ_0619 tstart with t.organ_id = 2
connect by  t.organ_id = prior t.parent_idorder by t.organ_id;

在这里插入图片描述


http://www.ppmy.cn/server/51398.html

相关文章

(南京观海微电子)——TFT LCD压合技术

TFT-LCD TFT-LCD open cell后段制程主要指的是将驱动IC和PCB压合至液晶板上&#xff0c;这个制程主要由三个步骤组成&#xff1a; 1.ACF (Anisotropic Conductive Film)的涂布。 在液晶板需要压合驱动IC的地方涂布ACF&#xff0c;ACF又称异方性导电胶膜&#xff0c;特点是上下…

Selenium WebDriver - 浏览器交互

本文翻译整理自&#xff1a;https://www.selenium.dev/documentation/webdriver/interactions/ 文章目录 一、获取浏览器信息1、获取头衔2、获取当前URL 二、浏览器导航1、导航到2、后退3、往前4、刷新 三、JavaScript警报、提示和确认1、警报2、确认3、提示 四、使用cookie1、…

购物返利系统中的数据处理与优化策略

购物返利系统中的数据处理与优化策略 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 随着电商行业的不断发展&#xff0c;购物返利系统作为一种常见的营销手段…

redis-实战篇(8)达人探店

8、达人探店 8.1、达人探店-发布探店笔记 发布探店笔记 探店笔记类似点评网站的评价&#xff0c;往往是图文结合。对应的表有两个&#xff1a; tb_blog&#xff1a;探店笔记表&#xff0c;包含笔记中的标题、文字、图片等 tb_blog_comments&#xff1a;其他用户对探店笔记的…

2024 年值得推荐的 10 款 iPhone 数据恢复软件

iPhone 从来都不是一个简单的打电话电话。它就像一台微型电脑&#xff0c;让我们互相联系、拍照、拍视频、发邮件、看文档、看书。然而&#xff0c;随着它成为日常生活的必需品&#xff0c;我们总是容易因各种原因丢失数据&#xff0c;如删除、恢复出厂设置、iOS 错误、文件同步…

Java程序之让气球上升

问题&#xff1a; ACM比赛时间再次举行&#xff01;看到气球四处漂浮是多么的兴奋啊。但要告诉你一个秘密&#xff0c;评委们最喜欢的时间是猜测最流行的问题。比赛结束后&#xff0c;他们会数出每种颜色的气球&#xff0c;然后找到结果。今年&#xff0c;他们决定把这份可爱的…

【Mac】KeyKey — Typing Practice for mac软件介绍及安装

软件介绍 KeyKey 是一款为 macOS 设计的盲打练习软件&#xff0c;旨在帮助用户提高打字速度和准确性。它通过提供多种练习模式和实时反馈&#xff0c;使用户能够逐渐掌握触摸打字技能。以下是 KeyKey 的主要功能和特点&#xff1a; 主要功能和特点 多语言支持&#xff1a; …

数据库讲解---(数据库保护)【下】

目录 一.并发控制 1.1并发操作引发的问题 1.1.1丢失修改 1.1.2不可重复读 1.1.3读”脏“数据 1.2调度及其可串行化 1.3事务的隔离性级别 1.4封锁技术【重要】 1.4.1排他锁 1.4.2共享锁 1.5封锁协议 1.5.1一级封锁协议 1.5.2二级封锁协议 1.5.3三级封锁协议 1.5.…