start with connect by prior 详细用例
时间: 2024-03-26 14:41:34 浏览: 102
Oracle递归查询start with connect by prior的用法
5星 · 资源好评率100%
"Connect by prior" 是一种在 Oracle 数据库中用于处理层次结构数据的关键字。它可以通过一个 SELECT 语句来实现对数据进行树形结构的查询和遍历。下面是一个详细的用例:
假设我们有一个表格 department,其中包含了公司的各个部门信息,每个部门都有一个上级部门。表格结构如下:
```
DEPARTMENT_ID DEPARTMENT_NAME PARENT_DEPARTMENT_ID
1 CEO Office NULL
2 HR Department 1
3 Finance Department 1
4 IT Department 1
5 Marketing 1
6 Recruitment 2
7 Training 2
8 Payroll 3
9 Accounts Payable 3
```
我们希望查询出所有部门的层次结构,并按照层次结构进行排序,输出结果如下:
```
DEPARTMENT_ID DEPARTMENT_NAME LEVEL
1 CEO Office 1
2 HR Department 2
6 Recruitment 3
7 Training 3
3 Finance Department 2
8 Payroll 3
9 Accounts Payable 3
4 IT Department 2
5 Marketing 2
```
我们可以使用以下 SQL 语句来实现这个查询:
```
SELECT department_id, department_name, LEVEL
FROM department
START WITH parent_department_id IS NULL
CONNECT BY PRIOR department_id = parent_department_id
ORDER SIBLINGS BY department_name;
```
解释一下这个语句的含义:
- START WITH:指定查询的起始点,这里是 parent_department_id IS NULL,即根节点为 CEO Office。
- CONNECT BY PRIOR:指定层次关系的连接条件,这里是 department_id = parent_department_id,表示当前行的 department_id 列等于上一层行的 parent_department_id 列。
- ORDER SIBLINGS BY:按照同一级别的兄弟节点进行排序,这里是按照 department_name 进行排序。
最终的查询结果中,每一行包含了当前部门的 department_id、department_name,以及它在层次结构中的 LEVEL(层级)信息。
阅读全文