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;
相关推荐
SaaS_Product24 分钟前
OneDrive中的文件批量迁移到Zoho网盘
经验分享·云计算·saas·onedrive
叼烟扛炮1 小时前
Linux 学习笔记(五十八):IO 多路复用封神——epoll 底层原理揭秘
linux·运维·服务器·网络·笔记·学习·php
陈布衣3 小时前
MySQL(1)_MySQL 5.7.21 Linux 安装笔记
linux·笔记·mysql
Decay__5 小时前
22_MySQL 运维自动化平台 —— 部署编排 + 监控 + 巡检 + 告警 + 工单闭环一体化
运维·数据库·sql·mysql·架构
缘来是你远去是我6 小时前
本地个人笔记exe
笔记
FakeOccupational7 小时前
【电路笔记 STM32】RTC配置:晶振选择+闹钟Configuration+中断设置
笔记·stm32·实时音视频
迪康coolmu7 小时前
企业U盘管控落地实战:基于迪康端点安全一体化管理系统的移动存储安全实践
运维·人工智能·经验分享·笔记·安全·电脑
Decay__7 小时前
21_MySQL 优化案例集 —— 慢 SQL 优化、索引重构与参数调整收益对比
运维·数据库·sql·mysql·架构
恩创软件开发8 小时前
自助KTV系统管理员续单功能
经验分享·小程序
挖掘狂人8 小时前
MySQL 深分页优化:limit 100000, 10 慢在哪,怎么救
后端·sql·mysql