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

一、基本语法

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,level
  from tem_organ_0619 t
 start with t.organ_id = 2
connect by prior t.organ_id = t.parent_id
  order by t.organ_id;

在这里插入图片描述

不设置开始节点:

select t.organ_id, t.parent_id, t.organ_abbr,level
  from tem_organ_0619 t
 -- start with t.organ_id = 2
connect by prior t.organ_id = t.parent_id
  order by t.organ_id;

在这里插入图片描述

2.2 向上查找

select t.organ_id, t.parent_id, t.organ_abbr,level
  from tem_organ_0619 t
 start with t.organ_id = 20401
connect by  t.organ_id = prior t.parent_id
  order by t.organ_id;

在这里插入图片描述

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

select t.organ_id, t.parent_id, lpad(' ',level*4,' ')||t.organ_abbr organ_abbr,level
  from tem_organ_0619 t
 start with t.organ_id = 2
connect by  t.organ_id = prior t.parent_id
  order 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_id
  from tem_organ_0619 t
 start with t.organ_id = 2
connect by  t.organ_id = prior t.parent_id
  order 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_isleaf
  from tem_organ_0619 t
 start with t.organ_id = 2
connect by  t.organ_id = prior t.parent_id
  order 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 t
 start with t.organ_id = 2
connect by  t.organ_id = prior t.parent_id
  order by t.organ_id;

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/735332.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Springboot整合MinIO实现系统文件的便捷式管理实例

一、MinIO简介 1.基础描述 MinIO 是一个高性能的对象存储系统&#xff0c;用于存储大量非结构化数据。它以简洁、高效、可靠和高扩展性著称&#xff0c;能够胜任各种数据密集型任务。MinIO 采用了与 Amazon S3 兼容的 API&#xff0c;使得用户无需额外学习即可上手使用。下面…

Ubuntu iso 镜像下载 步骤截图说明

Ubuntu镜像下载&#xff0c;在这个网址&#xff1a; Enterprise Open Source and Linux | Ubuntu 步骤如下图所示&#xff1a; 1、登入网址 2、点击Get Ubuntu 3、点击Download Ubuntu Desktop 后续点击Downloadload 24.04 LTS直接下载就行 如果需要下载其它版本&#xf…

设计模式学习之——单例模式

文章目录 单例模式什么叫做单例模式单例模式的动机 单例模式的引入思考 饿汉式单例和懒汉式单例饿汉式单例懒汉式单例 单例模式总结1&#xff0e;主要优点2&#xff0e;主要缺点3&#xff0e;适用场景 单例模式 什么叫做单例模式 顾名思义&#xff0c;简单来说&#xff0c;单…

VS Code安装及环境配置(超详细)

VS Code简介 Visual Studio Code&#xff08;简称 VS Code &#xff09;是 Microsoft 于2015年4月发布的一款代码编辑器&#xff0c;以界面简洁、轻量著称。 它是一款免费开源的现代化轻量级代码编辑器&#xff0c;支持几乎所有主流开发语言的语法高亮、智能代码补全、自定义…

LLaMA:挑战大模型Scaling Law的性能突破

实际问题 在大模型的研发中,通常会有下面一些需求: 计划训练一个10B的模型,想知道至少需要多大的数据?收集到了1T的数据,想知道能训练一个多大的模型?老板准备1个月后开发布会,给的资源是100张A100,应该用多少数据训多大的模型效果最好?老板对现在10B的模型不满意,想…

游戏遇到攻击有什么办法能解决?

随着网络技术的飞速发展&#xff0c;游戏行业在迎来繁荣的同时&#xff0c;也面临着日益严峻的网络威胁。黑客攻击、数据泄露、DDoS攻击等安全事件频发&#xff0c;给游戏服务器带来了极大的挑战。面对愈演愈烈的网络威胁&#xff0c;寻找一个能解决游戏行业攻击问题的安全解决…

C++STL 初阶(5)vector的简易实现(上)

不同于string只实现一个最简单的版本&#xff0c;vector在此处我们要实现的是模版类&#xff0c;类模版的声明和定义分离非常不方便&#xff08;会在链接时报错&#xff09;&#xff0c;所以我们都只在一个vector.h下去实现声明和定义。后续我们提及到的库里面实现的vector也是…

Go 与 Java 字符编码选择:UTF-8 与 UTF-16 的较量

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Chrome插件: Octotree让你GitHub代码浏览速度飙升

在GitHub上浏览和管理项目代码时&#xff0c;您是否曾为复杂的目录结构感到困惑&#xff1f;如果有一种工具能够让您轻松浏览项目的文件和目录&#xff0c;会不会大大提升您的工作效率&#xff1f;这正是Octotree浏览器插件所能做到的。 不过说实话&#xff0c;GitHub自带的代码…

stm32学习笔记---GPIO输入(理论部分)

目录 GPIO输入模式下的硬件和电路 按键原理 传感器原理 什么是上下拉电阻&#xff1f; 运算放大器当做比较器 按键的硬件电路 传感器的硬件电路 STM32用到的C语言知识 STM32中的C语言数据类型 C语言中的宏定义 typedef和define的区别是什么&#xff1f; C语言的枚举…

云计算期末综合测试题

云计算综合测试题 单选题填空题判断题简答题 单选题 这里选择题&#xff0c;直接以填空题展示&#xff0c;并给出解析 Bigtable是&#xff08;Google&#xff09;开发的分布式存储系统 解析&#xff1a;分布式结构化数据表Bigtable是Google基于GFS和Chubby开发的分布式存储系统…

FlowUs2024重磅革新预告:RAG技术赋能『问问AI』,笔记变现新纪元等你开启!

&#x1f389; 在FlowUs的广阔天地间&#xff0c;知识的边界被无限拓展&#xff0c;引领着一场场创新与收获的庆典&#xff01;&#x1f680; 随着一年间不断的精进与革新&#xff0c;FlowUs与众多用户并肩前行&#xff0c;在追求极致体验的道路上迈出坚实步伐。步入2024年&am…

STM32CubeIDE提示找不到头文件(No such file or directory)的解决办法

0 前言 最近在使用STM32CubeIDE时&#xff0c;发现为工程添加了头文件路径&#xff0c;但编译的时候还是报错&#xff0c;提示找不到头文件&#xff1a; 1 解决办法 1.1 为工程添加头文件路径 右键我们的工程&#xff0c;然后添加头文件路径&#xff08;最好是相对路径&am…

【开发】内网穿透ztncui搭建私有节点

文章目录 写在前面一键部署ztnuci记录后续 写在前面 前面搭建moon节点转发的确会降低延迟&#xff0c;但是总有出现moon节点解析不成功的例子&#xff0c;于是疯狂寻找答案是为什么&#xff1f;终于在知乎上找到这样一个答案。 一键部署ztnuci 参考这篇很完善的教程和贴心的…

Temu(拼多多跨境电商) API接口:获取商品详情

核心功能介绍——获取商品详情 在竞争激烈的电商市场中&#xff0c;快速、准确地获取商品数据详情对于电商业务的成功至关重要。此Temu接口的核心功能在于其能够实时、全面地获取平台上的商品数据详情。商家通过接入Temu接口&#xff0c;可以轻松获取商品的标题、价格、库存、…

【已解决】在IDEA中使用Git拉取代码时提示:Can‘t update / master has no tracked branch

文章目录 问题描述原因分析解决方案 问题描述 在IDEA中使用Git拉取代码&#xff0c;尝试更新本地项目代码&#xff0c;提示 " Cant update / master has no tracked branch "&#xff0c;如下图所示&#xff1a; 原因分析 出现上述问题意味着本地名为master的分支&…

如何降低MCU系统功耗?

大家在做MCU系统开发的时候&#xff0c;是否也碰到过降低MCU系统功耗的需求&#xff1f; MCU系统整板功耗是个综合的数据&#xff0c;包括MCU功耗以及外部器件功耗&#xff0c;在此我们主要介绍如何降低MCU的功耗&#xff1a; 可以在满足应用的前提下&#xff0c;降低MCU的运…

仿饿了么加入购物车旋转控件 - 自带闪转腾挪动画 的按钮

, mWidth - mCircleWidth, mHeight - mCircleWidth); canvas.drawRoundRect(rectF, mHintBgRoundValue, mHintBgRoundValue, mHintPaint); //前景文字 mHintPaint.setColor(mHintFgColor); // 计算Baseline绘制的起点X轴坐标 int baseX (int) (mWidth / 2 - mHintPaint.m…

数据结构与算法引入(Python)

华子目录 引入第一次尝试第二次尝试 算法的概念算法的五大特性 算法效率衡量执行时间单靠时间值绝对可信吗&#xff1f; 时间复杂度与 "大O记法"如何理解 “大O记法” 最坏时间复杂度时间复杂度的几条基本计算规则 算法分析常见的时间复杂度常见时间复杂度之间的关系…

【进阶篇-Day5:JAVA常用API的使用(Math、BigDecimal、Object、包装类等)】

目录 1、API的概念2、Object类2.1 Object类的介绍2.2 Object的toString()方法2.3 Object的equals()方法2.4 Objects概述 3、Math类4、System类5、BigDecimal类6、包装类6.1 包装类的概念6.2 几种包装类&#xff08;1&#xff09;手动转换包装类&#xff1a;&#xff08;2&#…