oracle 部门层级查询

商品分类与数据库操作
本文详细介绍了如何使用SQL创建表并进行数据插入操作,通过层级结构展示商品分类,并使用SQL查询展示分类信息。

create table(
CCID             varchar2(20)                        not null,
   CCNAME             VARCHAR2(100)                   not null,
   fid              varchar2(20) 
   constraint PK_T primary key (CCID)
);
insert into t values('0001',        '家用电器', '9999' );
insert into t values('00010001',    '小家电',    '0001'  );
insert into t values('00010002',    '大家电',     '0001'  );
insert into t values('000100020001','洗衣机',     '00010002' );
insert into t values('000100020002','平板电视',   '00010002' );
insert into t values('000100020003','冰箱',       '00010002' );
insert into t values('0002',        '手机数码',  '9999'  );
insert into t values('00020001',   '手机通讯',   '0002' );
insert into t values('00020002',    '手机配件',   '0002'  );
insert into t values('00020003',    '数码配件',   '0002'  );
insert into t values('0003',        '服饰鞋帽',  '9999'  );
insert into t values('0004',        '图书影视',  '9999' );
select ccid,ltrim(sys_connect_by_path(ccname,'-'),'-') ccname  
  from  t  
   start with fid='9999'  
   connect by prior ccid = fid;
--结果
CCID                 CCNAME-------------------- --------------------------------------------------------------------------------
0001                 家用电器
00010001             家用电器-小家电
00010002             家用电器-大家电
000100020001         家用电器-大家电-洗衣机
000100020002         家用电器-大家电-平板电视
000100020003         家用电器-大家电-冰箱
0002                 手机数码
00020001             手机数码-手机通讯
00020002             手机数码-手机配件
00020003             手机数码-数码配件
0003                 服饰鞋帽
0004                 图书影视 

12 rows selected

















                
### Oracle 数据库层级查询 `CONNECT BY` 的使用方法 Oracle 数据库中的层级查询是一种用于处理具有层次结构数据的强大工具。它通常应用于表示树形或父子关系的数据模型,比如组织架构、文件系统等。 #### 基本语法 以下是 `CONNECT BY` 查询的基本语法: ```sql SELECT column_list FROM table_name START WITH condition CONNECT BY PRIOR column1 = column2; ``` - **`START WITH`**: 定义层级查询的起始节点条件。 - **`CONNECT BY`**: 指定父节点和子节点之间的关系。 - **`PRIOR`**: 表示当前记录的父记录[^1]。 #### 示例场景 假设有一张名为 `ORGANIZATION` 的表,存储了一个公司的组织架构信息: | BranchNum | SupBranchNum | Name | |-----------|--------------|------------| | 1 | NULL | Head Office| | 2 | 1 | Department A| | 3 | 1 | Department B| | 4 | 2 | Team Alpha | | 5 | 2 | Team Beta | ##### SQL 示例 以下是一个典型的层级查询示例,展示如何获取整个组织架构的关系: ```sql SELECT LEVEL, lpad(' ', (LEVEL - 1) * 5, ' ') || Name AS TreeStructure, BranchNum, SupBranchNum FROM ORGANIZATION START WITH SupBranchNum IS NULL CONNECT BY PRIOR BranchNum = SupBranchNum; ``` - **`LEVEL`**: 是一个伪列,返回每一行在层级结构中的深度[^3]。 - **`LPAD`**: 用于缩进显示,增强可读性。 运行以上查询的结果将是: | LEVEL | TreeStructure | BranchNum | SupBranchNum | |-------|----------------------|-----------|--------------| | 1 | Head Office | 1 | | | 2 | Department A | 2 | 1 | | 3 | Team Alpha | 4 | 2 | | 3 | Team Beta | 5 | 2 | | 2 | Department B | 3 | 1 | #### 关键字解释 1. **`START WITH`**: 这里指定了根节点为 `SupBranchNum IS NULL`,即没有上级机构的节点作为起点[^3]。 2. **`CONNECT BY PRIOR`**: 定义了父子关系,其中 `PRIOR BranchNum = SupBranchNum` 表明当前记录的父记录是其 `SupBranchNum` 所指向的记录[^1]。 #### 实际应用场景 除了简单的组织架构外,`CONNECT BY` 可广泛应用于其他领域,例如: - 文件系统的目录结构。 - 订单的递归关联(如订单及其子订单)。 - 配置项的继承关系。 #### 结合序列生成主键值 如果需要动态生成主键值并插入到层级结构中,可以结合 Oracle 序列来实现。例如,在插入新部门时自动分配唯一编号: ```sql INSERT INTO ORGANIZATION (BranchNum, SupBranchNum, Name) VALUES (SEQ_ORG.NEXTVAL, 1, 'New Department'); ``` 这里 `SEQ_ORG` 是预先创建的一个序列对象[^2]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值