Oracle SQL中的遞歸應用實例主要涉及到查詢數據的層級關系,例如部門與員工的關系、商品分類與商品的關系等。遞歸查詢允許我們處理這種層級數據,并檢索出所有相關的記錄。
以下是一個簡單的Oracle SQL遞歸應用實例,該實例查詢一個組織結構的層級關系,其中每個部門都有一個上級部門(除了頂層部門)。
首先,假設我們有一個名為departments
的表,其結構如下:
CREATE TABLE departments (
department_id NUMBER PRIMARY KEY,
department_name VARCHAR2(50),
manager_id NUMBER,
parent_id NUMBER
);
在這個表中,department_id
是部門的唯一標識符,department_name
是部門的名稱,manager_id
是部門經理的ID(如果該部門沒有經理,則為NULL),parent_id
是上級部門的ID(頂層部門的parent_id
為NULL)。
接下來,我們使用遞歸查詢來檢索所有部門及其子部門:
WITH RECURSIVE department_hierarchy AS (
-- 初始化查詢,從頂層部門開始
SELECT department_id, department_name, manager_id, parent_id, 1 AS level
FROM departments
WHERE parent_id IS NULL
UNION ALL
-- 遞歸步驟,連接子部門
SELECT d.department_id, d.department_name, d.manager_id, d.parent_id, dh.level + 1
FROM departments d
JOIN department_hierarchy dh ON d.parent_id = dh.department_id
)
SELECT * FROM department_hierarchy;
在這個查詢中,我們首先使用WITH RECURSIVE
子句定義了一個名為department_hierarchy
的遞歸公共表表達式(CTE)。CTE的初始化部分(UNION ALL
之前的查詢)從頂層部門開始,遞歸部分(UNION ALL
之后的查詢)通過連接departments
表和CTE來檢索子部門。
最后,我們從department_hierarchy
CTE中選擇所有記錄,這將返回所有部門及其子部門的層級關系。