当前位置: 首页 > news >正文

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是江苏省的主键

查询结果:

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

SELECTID,PARENT_ID ,NAME,sys_connect_by_path(NAME, '->') namepath,LEVEL
FROMREGION
START WITHNAME = '苏州市'
CONNECT BYPRIOR 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;

查询结果:

相关文章:

  • LeetCode 2951.找出峰值:模拟(遍历)
  • windows ip助手函数了解
  • 前端本地项目启动供后端或者测试调试
  • Java实现图片保存到pdf的某个位置2
  • 基于Matlab的车道线检测系统 (文末有代码获取链接)【含Matlab源码 MX_001期】
  • C# WPF编程基础
  • 外汇天眼:风险预警!以下平台监管牌照被撤销!
  • 2024年5月22日 (周三) 叶子游戏新闻
  • 国产数据库替代加速 助力数字中国建设
  • firewalld
  • 小小字符串竟然如此嚣张 —— 聊聊 Java 的 String
  • 四川景源畅信:新人做抖店的成本很高吗?
  • C++容器之位集(std::bitset)
  • 3步找回丢失数据,EasyRecovery让数据恢复如此简单!
  • 骆驼大赛
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • Android优雅地处理按钮重复点击
  • canvas绘制圆角头像
  • gulp 教程
  • iOS编译提示和导航提示
  • JS字符串转数字方法总结
  • vue的全局变量和全局拦截请求器
  • windows下mongoDB的环境配置
  • 阿里云Kubernetes容器服务上体验Knative
  • 入手阿里云新服务器的部署NODE
  • 使用docker-compose进行多节点部署
  • 组复制官方翻译九、Group Replication Technical Details
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (30)数组元素和与数字和的绝对差
  • (二十四)Flask之flask-session组件
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (四) Graphivz 颜色选择
  • (一)SpringBoot3---尚硅谷总结
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)Sql Server 保留几位小数的两种做法
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .NET轻量级ORM组件Dapper葵花宝典
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [autojs]逍遥模拟器和vscode对接
  • [C/C++] -- 二叉树
  • [C/C++]数据结构 循环队列
  • [CISCN 2019华东南]Web11
  • [hdu 3065] 病毒侵袭持续中 [AC自动机] [病毒特征码匹配]
  • [idea]关于idea开发乱码的配置
  • [JavaWeb学习] idea新建web项目