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;
相关推荐
bitbrowser4 小时前
giffgaff突然停用?先分清闲置停用和长期境外断开
笔记
九硕智慧建筑一体化厂家4 小时前
数字化管控落地,直流照明构筑安全照明体系
运维·人工智能·笔记·安全·智慧城市
AI云海4 小时前
天幕红尘笔记
笔记
青山是哪个青山7 小时前
LangChain 学习笔记(三):LangSmith 调试与监控
笔记·学习·langchain
Full Stack Developme8 小时前
SQL 注入 的历史及设计工作原理
数据库·sql
阿坤带你走近大数据8 小时前
SQL里where后面的1=1是干嘛的,走的是什么索引
数据库·sql
阿坤带你走近大数据8 小时前
SQL的执行顺序和书写顺序的介绍
数据库·sql·oracle
蒸蒸yyyyzwd9 小时前
cpp选手备战后端学习笔记day6 秋招笔试题
笔记·学习
天工开户019 小时前
2026 Facebook投放正在发生的7个变化
人工智能·经验分享·facebook
茶本无香9 小时前
Java调用Shell脚本执行SQL数据库操作:从入门到实战
java·sql·shell