Oracle递归查询笔记

目录

一、创建表结构和插入数据

二、查询所有子节点

三、查询所有父节点

四、查询指定节点的根节点

五、查询指定节点的递归路径

六、递归子类

七、递归父类


一、创建表结构和插入数据

CREATE TABLE "REGION" 
   (	
	"ID" VARCHAR2(36) DEFAULT SYS_GUID() NOT NULL ENABLE, 
	"PARENT_ID" VARCHAR2(36), 
	"NAME" VARCHAR2(255) NOT NULL ENABLE, 
	"LATITUDE" NUMBER(10,6), 
	"LONGITUDE" NUMBER(10,6), 
	PRIMARY KEY ("ID")
   );
  
COMMENT ON COLUMN REGION.ID IS '主键';
COMMENT ON COLUMN REGION.PARENT_ID IS '父键';
COMMENT ON COLUMN REGION.NAME IS '地区名';
COMMENT ON COLUMN REGION.LATITUDE IS '经度';
COMMENT ON COLUMN REGION.LONGITUDE IS '纬度';

INSERT INTO "REGION" ("ID", "PARENT_ID", "NAME", "LATITUDE", "LONGITUDE") 
VALUES (SYS_GUID(), NULL, '江苏省', 31.2304, 120.663);

INSERT INTO "REGION" ("ID", "PARENT_ID", "NAME", "LATITUDE", "LONGITUDE") 
VALUES (SYS_GUID(), (SELECT "ID" FROM "REGION" WHERE "NAME" = '江苏省'), '苏州市', 31.2988, 120.5853);

INSERT INTO "REGION" ("ID", "PARENT_ID", "NAME", "LATITUDE", "LONGITUDE") 
VALUES (SYS_GUID(), (SELECT "ID" FROM "REGION" WHERE "NAME" = '苏州市'), '张家港市', 31.8754, 120.5553);

INSERT INTO "REGION" ("ID", "PARENT_ID", "NAME", "LATITUDE", "LONGITUDE") 
VALUES (SYS_GUID(), (SELECT "ID" FROM "REGION" WHERE "NAME" = '苏州市'), '吴中区', 31.2622, 120.6446);

INSERT INTO "REGION" ("ID", "PARENT_ID", "NAME", "LATITUDE", "LONGITUDE") 
VALUES (SYS_GUID(), (SELECT "ID" FROM "REGION" WHERE "NAME" = '苏州市'), '相城区', 31.3697, 120.646);

INSERT INTO "REGION" ("ID", "PARENT_ID", "NAME", "LATITUDE", "LONGITUDE") 
VALUES (SYS_GUID(), (SELECT "ID" FROM "REGION" WHERE "NAME" = '苏州市'), '吴江区', 31.1791, 120.6411);

INSERT INTO "REGION" ("ID", "PARENT_ID", "NAME", "LATITUDE", "LONGITUDE") 
VALUES (SYS_GUID(), (SELECT "ID" FROM "REGION" WHERE "NAME" = '张家港市'), '凤凰镇', 31.8754, 120.5553);

INSERT INTO "REGION" ("ID", "PARENT_ID", "NAME", "LATITUDE", "LONGITUDE") 
VALUES (SYS_GUID(), (SELECT "ID" FROM "REGION" WHERE "NAME" = '张家港市'), '塘桥镇', 31.8754, 120.5553);

INSERT INTO "REGION" ("ID", "PARENT_ID", "NAME", "LATITUDE", "LONGITUDE") 
VALUES (SYS_GUID(), (SELECT "ID" FROM "REGION" WHERE "NAME" = '吴中区'), '木渎镇', 31.2622, 120.6446);

INSERT INTO "REGION" ("ID", "PARENT_ID", "NAME", "LATITUDE", "LONGITUDE") 
VALUES (SYS_GUID(), (SELECT "ID" FROM "REGION" WHERE "NAME" = '相城区'), '黄埭镇', 31.3697, 120.646);

INSERT INTO "REGION" ("ID", "PARENT_ID", "NAME", "LATITUDE", "LONGITUDE") 
VALUES (SYS_GUID(), (SELECT "ID" FROM "REGION" WHERE "NAME" = '吴江区'), '平望镇', 31.1791, 120.6411);

INSERT INTO "REGION" ("ID", "PARENT_ID", "NAME", "LATITUDE", "LONGITUDE") 
VALUES (SYS_GUID(), (SELECT "ID" FROM "REGION" WHERE "NAME" = '吴江区'), '黎里镇', 31.1791, 120.6411);

INSERT INTO "REGION" ("ID", "PARENT_ID", "NAME", "LATITUDE", "LONGITUDE") 
VALUES (SYS_GUID(), (SELECT "ID" FROM "REGION" WHERE "NAME" = '江苏省'), '无锡市', 31.5704, 120.3055);

INSERT INTO "REGION" ("ID", "PARENT_ID", "NAME", "LATITUDE", "LONGITUDE") 
VALUES (SYS_GUID(), (SELECT "ID" FROM "REGION" WHERE "NAME" = '无锡市'), '锡山区', 31.5887, 120.3573);

INSERT INTO "REGION" ("ID", "PARENT_ID", "NAME", "LATITUDE", "LONGITUDE") 
VALUES (SYS_GUID(), (SELECT "ID" FROM "REGION" WHERE "NAME" = '无锡市'), '惠山区', 31.6514, 120.3036);

INSERT INTO "REGION" ("ID", "PARENT_ID", "NAME", "LATITUDE", "LONGITUDE") 
VALUES (SYS_GUID(), (SELECT "ID" FROM "REGION" WHERE "NAME" = '无锡市'), '滨湖区', 31.5502, 120.2598);

INSERT INTO "REGION" ("ID", "PARENT_ID", "NAME", "LATITUDE", "LONGITUDE") 
VALUES (SYS_GUID(), (SELECT "ID" FROM "REGION" WHERE "NAME" = '无锡市'), '江阴市', 31.9086, 120.2855);

INSERT INTO "REGION" ("ID", "PARENT_ID", "NAME", "LATITUDE", "LONGITUDE") 
VALUES (SYS_GUID(), (SELECT "ID" FROM "REGION" WHERE "NAME" = '无锡市'), '宜兴市', 31.3623, 119.8233);

二、查询所有子节点

SELECT *
FROM REGION 
START WITH NAME = '无锡市'
CONNECT BY PRIOR ID = PARENT_ID 

查询结果:

三、查询所有父节点

SELECT *
FROM REGION
START WITH NAME = '塘桥镇'
CONNECT BY PRIOR PARENT_ID = ID

查询结果:

四、查询指定节点的根节点

SELECT r.*,
connect_by_root(r.ID),
connect_by_root(NAME)
FROM REGION r
WHERE r.NAME = '江阴市'
START WITH r.PARENT_ID = '18F2184511D13555E0630100007F8BFA'
CONNECT BY PRIOR r.ID = r.PARENT_ID 

注:18F2184511D13555E0630100007F8BFA是江苏省的主键

查询结果:

五、查询指定节点的递归路径

SELECT
	ID,
	PARENT_ID ,
	NAME,
	sys_connect_by_path(NAME, '->') namepath,
	LEVEL
FROM
	REGION
START WITH
	NAME = '苏州市'
CONNECT BY
	PRIOR ID = PARENT_ID

查询结果:

六、递归子类

WITH t ( ID ,PARENT_ID,NAME ) 
AS(
SELECT ID ,PARENT_ID,NAME FROM REGION WHERE NAME='苏州市'
UNION ALL
SELECT d.ID ,d.PARENT_ID , d.NAME FROM t , REGION d
WHERE t.ID = d.PARENT_ID
)
SELECT * FROM t

查询结果:

七、递归父类

WITH t ( ID ,PARENT_ID, NAME)
AS(
SELECT ID ,PARENT_ID, NAME FROM REGION WHERE NAME='塘桥镇'
UNION ALL
SELECT d.ID ,d.PARENT_ID,d.NAME FROM t , REGION d
WHERE t.PARENT_ID = d.ID
)
SELECT * FROM t;

查询结果:

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

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

相关文章

RunnerGo V4.6.0 多项新增功能,快看看有没有你想要的!

RunnerGo V4.6.0版本上线,不仅对现有功能进行了深度优化和改进,还带来了诸多新功能。 UI 插件:浮窗升级,优化浏览体验 此次更新中,UI插件全新升级至V2.1版本。新版取消了页面内右下角按钮的设计,在浏览器右…

RPC 框架

RPC 全称 Remote Procedure Call——远程过程调用。 RPC技术简单说就是为了解决远程调用服务的一种技术,使得调用者像调用本地服务一样方便透明。RPC是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议。 集群和分布式 集群&…

疑惑点:动作监听时this的含义:可以理解为接口的多态

全部代码: package test;import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random;public class test3 extends JFrame implements ActionListener {JButton jb1 new JButton("你点我啊&am…

谢宁DOE培训适合哪些人?

近年来,谢宁DOE培训以其专业、系统的课程内容,受到了众多学习者的青睐。那么,这个培训究竟适合哪些人呢?深圳天行健企业管理咨询公司解析如下: 首先,谢宁DOE培训适合质量管理部门的专业人员。质量总监、质量…

Softing线上研讨会 | 使用Softing smartLink SW-HT将AB PLC下的HART设备连接到艾默生AMS设备管理器

| (免费) 线上研讨会时间:2024年6月25日 14:00~14:45 / 22:30~23:15 艾默生AMS设备管理器凭借其全面功能、优秀诊断能力、兼容性以及远程监控和管理功能,在过程工业中被证明是一款先进的工厂资产管理工具,可用于设备配置、诊断和监控、仪表校…

【Pandas】深入解析`pd.read_pickle()`函数

【Pandas】深入解析pd.read_pickle()函数 🌈 欢迎莅临我的个人主页👈这里是我深耕Python编程、机器学习和自然语言处理(NLP)领域,并乐于分享知识与经验的小天地!🎇 🎓 博主简介&…

TCP:传输控制协议

文章目录 TCP的服务TCP首部TCP连接的建立与终止建立连接协议连接终止协议TCP状态迁移图2MSL等待状态FIN_WAIT_2状态 流量控制快的发送方和慢的接收方滑动窗口 拥塞控制慢开始和拥塞避免快重传和快恢复 TCP的服务 应用数据被分割成TCP认为最适合发送的数据块当TCP发送一个段后&…

交流负载箱:电力系统的稳定利器

交流负载箱是电力系统中的一种重要设备,主要用于模拟电网中的负载情况,以便对电力系统进行各种性能测试和分析。它是电力系统的稳定利器,对于保障电力系统的稳定运行起着至关重要的作用。 交流负载箱可以模拟电网中的负载情况,为电…

西安航空学院电子工程学院领导莅临泰迪智能科技参观交流

5月26日,西安航空学院电子工程学院院长杨亚萍、专业教师刘坤莅临广东泰迪智能科技股份有限公司产教融合实训基地参观交流。泰迪智能科技董事长张良均、副总经理施兴、产品中心负责周东平、校企合作经理吴桂锋与泰迪智能科技韩伟进行热情了接待。双方就专业建设、协同…

Unity 之 Android 【获取设备的序列号 (Serial Number)/Android_ID】功能的简单封装

Unity 之 Android 【获取设备的序列号 (Serial Number)/Android_ID】功能的简单封装 目录 Unity 之 Android 【获取设备的序列号 (Serial Number)/Android_ID】功能的简单封装 一、简单介绍 二、获取设备的序列号 (Serial Number) 实现原理 1、Android 2、 Unity 三、注意…

【leetcode2765--最长交替子数组】

要求:给定一个数组,找出符合【x, x1,x,x-1】这样循环的最大交替数组长度。 思路:用两层while循环,第一个while用来找到符合这个循环的开头位置,第二个用来找到该循环的结束位置,并比较一下max进行记录。 …

C++模板使用

文章目录 目录 文章目录 前言 一、交换函数(泛型编程) 二、函数模板 2.1 函数模板概念 2.2函数模板格式 2.3使用方法 2.4 函数模板的原理 2.4.1库中的swap 2.5 函数模板的实例化 2.6 模板参数的匹配原则 三、类模板 3.1 类模板的定义格式 3.2类模板声明和定义分离 前言 C语言阶…

Springboot事务控制中A方法调用B方法@Transactional生效与不生效情况实战总结

介绍 本篇对Springboot事务控制中A方法调用B方法Transactional生效与不生效情况进行实战总结,让容易忘记或者困扰初学者甚至老鸟的开发者,只需要看这一篇文章即可立马找到解决方案,这就是干货的价值。喜欢的朋友别忘记来个一键三连哈&#x…

抖音本地生活服务商入驻指南分享!

当前,各大平台的团购外卖业务持续火爆,并逐渐成为众多创业赛道中的大热门。其中,本地生活服务更是在短时间内杀出重围,成为创业者们的首选。 根据抖音生活服务近日发布的《2023年度数据报告》,2023年,抖音生…

微信小程序图片懒加载如何实现?

微信小程序开发时,对于有图片的列表在加载时,为了用户体验更好,必需要对图片做懒加载。 如下图所示,页面在打开时,图片会按需加载,这样用户体验没有那么生硬。 以下将介绍图片懒加载的步骤: 1.…

R18 NTN中的RACH-less HO

在看R18 38.300时,发现NTN场景 增加了如下黄色字体的内容,R18 NTN支持了RACH-less HO,索性就简单看了看。 NTN RACH less HO相关的描述主要在38.331,38.213和38.321中。38.300中的描述显示:网络侧会通过RRCReconfiguration消息将RACH-less HO相关的配置下发给UE, 其中会包…

Java语言ADR药物不良反应系统源码Java+IntelliJ+IDEA+MySQL一款先进的药物警戒系统

Java语言ADR药物不良反应系统源码JavaIntelliJIDEAMySQL一款先进的药物警戒系统源码 ADR药物不良反应监测系统是一个综合性的监测平台,旨在收集、报告、分析和评价药品在使用过程中可能出现的不良反应,以确保药品的安全性和有效性。 以下是对该系统的详细…

Java 面向对象编程(OOP)

面向对象编程(Object-Oriented Programming,OOP)是Java编程语言的核心思想之一。通过OOP,Java提供了一种结构化的编程方式,使代码更易于维护和扩展。 一、类和对象 1. 类的定义 类是对象的蓝图或模板,定…

【qt】一次性学会所有对话框

对话框 一.前言二.文件对话框1.选择一个文件2.选择多个文件3.选择目录4.保存文件 三.颜色对话框1.获取颜色 四.字体对话框1.获取字体 五.输入对话框1.输入文本2.输入整数3.输入小数4.输入条目 六.消息对话框1.问题框2.信息框3.警告框4.危机框5.关于框6.关于qt框七.总结 一.前言…

CSS学习笔记:动画——使用animation添加动画效果

过渡和动画 啥是过渡? 例如transition: all 0.5s; -> 拥有该属性的标签,在样式改变时,将在设定的时间内逐渐过渡到另一个样式 啥是动画? 和过渡有点类似,只不过常常用于实现多个状态间的变化过程,动画过程可控…