SQL层次查询语法

基本语法结构

sql 复制代码
SELECT ...
FROM table
START WITH condition  -- 起始条件
CONNECT BY [PRIOR] condition  -- 连接条件
关键概念:PRIOR 的位置决定方向
PRIOR 放在哪一边,哪一边就是父节点。
  1. 由上到下查询(父→子)
    场景:从根节点开始,查询所有子孙节点
sql 复制代码
-- 从指定根节点开始,向下查询所有子节点
SELECT *
FROM ORGAN O
START WITH O.ORG_ID = '根节点ID'  -- 起始点:根节点
CONNECT BY PRIOR O.ORG_ID = O.P_ORG_ID  -- PRIOR在左边,左边是父节点

执行逻辑:

先找到 ORG_ID = '根节点ID' 的记录

然后找 P_ORG_ID = 当前记录的ORG_ID 的记录(子节点)

递归继续找子节点的子节点...

示例:

aql 复制代码
-- 查询总公司下的所有部门
SELECT ORG_ID, ORG_NAME, P_ORG_ID, LEVEL
FROM ORGAN
START WITH ORG_NAME = '总公司'  -- 从总公司开始
CONNECT BY PRIOR ORG_ID = P_ORG_ID  -- 向下找子节点
ORDER BY LEVEL;
  1. 由下到上查询(子→父)
    场景:从某个节点开始,查询所有祖先节点
sql 复制代码
-- 从指定节点开始,向上查询所有父节点
SELECT *
FROM ORGAN O
START WITH O.ORG_ID = '子节点ID'  -- 起始点:子节点
CONNECT BY PRIOR O.P_ORG_ID = O.ORG_ID  -- PRIOR在左边,左边是父节点

执行逻辑:

先找到 ORG_ID = '子节点ID' 的记录

然后找 ORG_ID = 当前记录的P_ORG_ID 的记录(父节点)

递归继续找父节点的父节点...

示例:

sql 复制代码
-- 查询某个部门的所有上级机构
SELECT ORG_ID, ORG_NAME, P_ORG_ID, LEVEL
FROM ORGAN
START WITH ORG_ID = '部门A的ID'  -- 从部门A开始
CONNECT BY PRIOR P_ORG_ID = ORG_ID  -- 向上找父节点
ORDER BY LEVEL DESC;
相关推荐
xian_wwq6 分钟前
【学习笔记】深度认知系列-第10讲AI绘画与设计——从Stable Diffusion到Midjourney
笔记·学习·ai作画
凯尔萨厮7 分钟前
Java学习笔记十五(GUI)
java·笔记·学习
陈年老古董14 分钟前
矿物分类实战:从传统机器学习到深度学习(含PyTorch实现)
笔记·深度学习·学习·机器学习·分类
咖啡忍者15 分钟前
【SAP】100小时学会SAP-5生产计划PP
笔记
摇滚侠27 分钟前
《SpringBoot 3:入门与应用实战》第 13 章 整合 MyBatis MyBatis 简单开发 阅读笔记 39
spring boot·笔记·mybatis
养生技术人37 分钟前
Oracle OCP认证考试题目详解082系列第17题
运维·数据库·sql·oracle·ocp
xieliyu.1 小时前
计算机网络:Fiddler 抓包工具使用教程 + HTTP 协议报文格式详解
java·笔记·计算机网络·测试工具·http·java-ee·fiddler
点心的游戏开发世界1 小时前
GDScript 入门笔记(二):变量与数据类型
笔记·游戏引擎·godot
蒸蒸yyyyzwd1 小时前
CPP选手秋招准备学习笔记day25
笔记·学习
隔窗听雨眠1 小时前
活动中台系统慢SQL治理实践:从监控告警到性能优化的全链路方法论
sql·性能优化·github