oracle中关于connect by的语法及实现(前序遍历树)

news2024/11/28 3:42:36

语法

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

使用示例

例:

create table tree(id int,parentid int);
insert into tree values(120,184);
insert into tree values(121,120);
insert into tree values(122,120);
insert into tree values(123,120);
insert into tree values(124,122);
insert into tree values(125,123);
insert into tree values(126,123);
insert into tree values(127,125);
insert into tree values(128,125);
select id from tree start with id = 120 connect by prior id = parentid;

在这里插入图片描述

id
120
123
126
125
128
127
122
124
121

语法详解

简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:org_id,parent_id,那么通过表示每一条记录的parent是谁,就可以形成一个树状结构,用上述语法的查询可以取得这棵树的所有记录,其中:
条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。
条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR id = parent_id;就是说上一条记录的id 是本条记录的parent_id,即本记录的父亲是上一条记录。
条件3 是过滤条件,用于对返回的所有记录进行过滤。

简单介绍如下:
在扫描树结构表时,需要依此访问树结构的每个节点,一个节点只能访问一次,其访问的步骤如下:
第一步:从根节点开始;
第二步:访问该节点;
第三步:判断该节点有无未被访问的子节点,若有,则转向它最左侧的未被访问的子节,并执行第二步,否则执行第四步;
第四步:若该节点为根节点,则访问完毕,否则执行第五步;
第五步:返回到该节点的父节点,并执行第三步骤。
总之:扫描整个树结构的过程也即是前序遍历树==(数据库存储不区分左右)==的过程。(如上图)

子句使用介绍

START WITH

START WITH 子句为可选项,用来标识哪个节点作为查找树型结构的根节点,若该子句被省略,则表示所有满足查询条件的行作为根节点。
START WITH:不但可以指定一个根节点,还可以指定多个根节点。

CONNECT BY

CONNECT BY子句说明每行数据将是按层次顺序检索,并规定将表中的数据连入树型结构的关系中。PRIOR运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。

PRIOR

运算符PRIOR被放置于等号前后的位置,决定着查询时的检索顺序。
PRIOR被置于CONNECT BY子句中等号的前面时,则强制从根节点到叶节点的顺序检索,即由父节点向子节点方向通过树结构,我们称之为自顶向下的方式。如:
CONNECT BY PRIOR EMPNO=MGR
PIROR运算符被置于CONNECT BY 子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即由子节点向父节点方向通过树结构,我们称之为自底向上的方式。例如:
CONNECT BY EMPNO=PRIOR MGR

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache ECharts简介和相关操作

文章目录 一、Apache ECharts介绍二、快速入门1.下载echarts.js文件2.新建index.html文件3.准备一个DOM容器用于显示图表4.完整代码展示5.相关配置 三、演示效果四、总结 一、Apache ECharts介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观…

使用Docker Compose部署Spug并实现内网穿透远程访问

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、文件…

【Ubuntu】虚拟机安装系统与初始化配置

一、安装ubuntu系统 1、首先在虚拟机上安装一个虚拟机系统。 简单操作忽略,只贴出与安装linux不同的地方。 内存,处理器,磁盘等什么自己看着需要自己增加们这边不做过多说明。一直下一步,然后就安装好了。2、选择镜像位置然后启…

python自动化测试(六):唯品会商品搜索与规格选择-练习

目录 一、配置代码 二、操作 2.1 输入框“运动鞋” 2.2 点击搜索按钮 2.3 选择品牌 2.4 选择主款 2.5 适用性别 2.6 选择尺码 2.7 选择商品:(通过css的属性去匹配) 2.8 点击配送地址选项框 一、配置代码 # codingutf-8 from selen…

Netty第一部

一、select和epoll原理分析 外设设备网卡、鼠标、键盘等通过总线写到内存中,中间就有DMA拷贝,操作系统怎么知道内存中有数据了,这就需要操作系统通过中断机制确定,如果有中断信号过来,cpu会首先打断用户程序执行&…

java进行支付宝支付(沙箱环境)

目录 1.准备工作 2.idea配置文件准备 3.后端代码编写 接口1:支付订单 接口2:查询订单 接口3:订单退款 接口4:查询退款结果 接口5:获取总账单 接口6:取消订单 接口7:回调接口 定时任务…

【stata基础代码大全 】 可独立完成一篇实证

【stata基础代码大全 】 可独立完成一篇实证 用stata打开,直接替换自己需要的变量就行,小白友好❗️❗️❗️ 文件包括以下内容 一、数据预处理 二、Stata中数据的基本处理 *(1)取年份 *(2)剔除数据中的样本 *(3)生成新的变量 *(4)给变量添加标签 *(5)生…

开关电源测试过压保护的测试标准及其方法

过压保护的原理 过压保护是电压超过预定值时降低电压的一种方式,原理是通过电路中的电压检测电路来检测电路中的电压是否超过了设定的阈值,如果超过了阈值,就会触发过压保护器件,使电源断开或使受控设备电压降低,保护电…

智慧矿山:AI算法在带式运输机中的异物识别应用

随着现代农业和工业的发展,带式运输机在各种生产作业中发挥着越来越重要的作用。然而,在带式运输机运行过程中,可能会混入各种异物,这些异物的存在可能会对运输过程和设备本身造成损害。为了解决这一问题,本文将介绍一…

VVG PAD DM蓝牙5.2双模热插拔PCB

键盘使用说明索引(均为出厂默认值) 软件支持(驱动的详细使用帮助)一些常见问题解答(FAQ)请认真阅读本说明首次使用步骤蓝牙配对规则(重要)蓝牙和USB切换键盘默认层默认触发层0的FN键…

低代码,程序员提高生产力的开发工具

目录 一、什么是低代码? 二、低代码的本质是什么? 三、低代码平台的搭建能力 四、写在最后 一、什么是低代码? 简单来说,低代码是一种用于应用程序开发的模块化方法,它能有效减少应用程序的开发时间。基于可重用的、组…

Nginx负载均衡 以及Linux前后端项目部署

一、Nginx简介 Nginx是一款高性能的开源Web服务器和反向代理服务器。它由俄罗斯的程序设计师Igor Sysoev创建,旨在解决传统Web服务器的性能限制问题。 Nginx采用事件驱动的架构和异步非阻塞的处理方式,使其能够处理大量并发连接,并具备良好…

机房精密空调发生内部设备通信故障不一会压缩机就停止工作,怎么处理?

环境: 山特AT-DA810U 精密空调 问题描述: 机房精密空调发生内部设备通信故障不一会压缩机就停止工作,怎么处理? 回风处不显示温湿度 解决方案: 1.进入诊断模式工程师密码333333 看到压缩机关闭了,强制输出测试一下压缩机正常 2.尝试更换温湿度传感器模块网口,重启…

1985-2022年全国各地级市绿色专利申请和授权数据

1985-2022年全国各地级市绿色专利申请和授权数据 1、时间:1985-2022年 2、指标:年份、地区、行政区划代码、所属省份、所属地域、绿色专利申请总量、绿色专利申请_发明专利、绿色专利申请_实用新型专利、绿色专利授权总量、绿色专利授权_发明专利、绿色…

IT老鸟给开发者升职加薪的小技巧

前言: 升职加薪对大多数人来说都是工作重要动力所在,但总存在“青出于蓝而胜于蓝”,后来人居上的情况。很多人不清楚,自己兢兢业业,任劳任怨,到头来还是得不到领导的重视,身边一起过来的同事都成…

学习笔记|两因素析因设计的方差分析|效应量|统计分析策略|《小白爱上SPSS》课程:SPSS第九讲 | 两因素析因设计的方差分析,超级详细

目录 学习目的软件版本原始文档两因素析因设计的方差分析一、实战案例二、统计策略三、SPSS操作1、正态性检验2、方差分析 四、结果解读Tips:效应量越大越好吗?统计分析策略 五、简单效应操作及结果1、SPSS操作2、结果解读 六、规范报告1、规范表格2、规…

[idea]关于idea开发乱码的配置

在JAVA开发中,一般统一设置为UTF-8的编码,包括但不限于开发工具、日志架构、虚拟机、文件编码等。常见配置如下: 1、IDEA工具 在idea64.exe.vmoptions、idea.exe.vmoptions中添加: -Dfile.encodingUTF-8 2、JAVA 运行在window…

web - 会话技术

文章目录 目录 文章目录 前言 一 . 会话 1.1 会话管理概述 1.2 会话管理实现手段 二 . Cookie 2.1 cookie概述 2.2 cookie的使用 2.3 Cookie的时效性 2.4 Cookie的提交路径 三 . Session 3.1 HttpSession概述 3.2 HttpSession的使用 3.3 HttpSession时效性 四 .…

9.MySQL索引的操作

个人主页:Lei宝啊 愿所有美好如期而遇 目录 索引操作 查询索引 创建主键索引 唯一索引的创建 普通索引的创建 全文索引的创建 删除索引 索引创建原则 索引操作 查询索引 第一种方法: show keys from 表名\G 我们了解其中几个就好。 第二种方法…

主从复制(gtid方式)

基于事务的Replication,就是利用GTID来实现的复制 GTID(全局事务标示符)最初由google实现,在MySQL 5.6中引入.GTID在事务提交时生成,由UUID和事务ID组成.uuid会在第一次启动MySQL时生成,保存在数据目录下的…