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;
相关推荐
阿星AI工作室2 小时前
WorkBuddy接入deepseek等9款平价大模型,告别积分焦虑
经验分享
BomanZQT2 小时前
NSK UPFC 2040-1 极速精密滚珠丝杠详述
经验分享·规格说明书
华山令狐虫2 小时前
DBAPI AI 写 SQL:支持动态 SQL 与参数占位符,自然语言一键生成
数据库·人工智能·sql·dbapi
HERR_QQ2 小时前
强化学习的数学原理 学习笔记
人工智能·笔记·学习·自动驾驶
杨连江3 小时前
可变级数LC无源自均压海量级联多电平拓扑机理研究——代替传统LCC/MMC的新一代特高压直流逆变架构
经验分享
liuyicenysabel6 小时前
多服务上线日记二:
服务器·笔记·学习
Xi-Xu6 小时前
什么时候需要 Multi-agent:不是分工,而是运行边界
人工智能·经验分享·安全
一个天蝎座 白勺 程序猿7 小时前
自动SQL优化实战|吃透调优接口+报告配置+统计+索引全流程落地
数据库·sql·sql优化
辰海Coding7 小时前
MiniSpring框架学习笔记-动态代理:如何在运行时插入逻辑?
java·笔记·学习·spring·动态代理