Oracle.How 中 sql 中的树结构以显示 SQL Oracle 中的树、子节点和父节点
Tree structure in sql in Oracle.How to show tree,child nodes and parent nodes in SQL Oracle
我想在 SQL 中显示一个包含子节点和父节点的树结构。
我有一个 table 像:
Employee
-------------
ID (int)
FirstName (varchar)
LastName (varchar)
ParentID (int)
Job (varchar)
代表员工。 ParentID代表员工的经理了。我希望这个 table 只有这个结构。
- 我想展示整个树结构。
- 我只想显示子节点
- 我只想显示父节点
查询-整个树结构:
SELECT *
FROM Employee
START WITH ParentID IS NULL
CONNECT BY PRIOR ID = ParentID
ORDER SIBLINGS BY LastName, FirstName, ID;
查询 - 给定员工的子女:
您不需要对此进行分层查询。
(父级由绑定变量:parent_id
给出)
SELECT *
FROM Employee
WHERE ParentID = :parent_id
ORDER BY LastName, FirstName, ID;
查询 - 给定员工的后代:
与整棵树相同的查询,但起点不同
(父级由绑定变量:parent_id
给出)
SELECT *
FROM Employee
START WITH ParentID = :parent_id
CONNECT BY PRIOR ID = ParentID
ORDER SIBLINGS BY LastName, FirstName, ID;
查询 - 员工及其祖先:
与之前的查询类似,但 CONNECT BY
颠倒了,您不需要对兄弟姐妹进行排序,因为每个员工只有一名直属经理。
(雇员由绑定变量:employee_id
给出)
SELECT *
FROM Employee
START WITH ID = :employee_id
CONNECT BY PRIOR ParentID = ID;
查询 - 员工的经理:
与上一个查询相同,但带有过滤器 LEVEL = 2
以仅获取直接父行。
(雇员由绑定变量:employee_id
给出)
SELECT e.*
FROM Employee e
WHERE LEVEL = 2
START WITH ID = :employee_id
CONNECT BY PRIOR ParentID = ID;
我想在 SQL 中显示一个包含子节点和父节点的树结构。 我有一个 table 像:
Employee
-------------
ID (int)
FirstName (varchar)
LastName (varchar)
ParentID (int)
Job (varchar)
代表员工。 ParentID代表员工的经理了。我希望这个 table 只有这个结构。
- 我想展示整个树结构。
- 我只想显示子节点
- 我只想显示父节点
查询-整个树结构:
SELECT *
FROM Employee
START WITH ParentID IS NULL
CONNECT BY PRIOR ID = ParentID
ORDER SIBLINGS BY LastName, FirstName, ID;
查询 - 给定员工的子女:
您不需要对此进行分层查询。
(父级由绑定变量:parent_id
给出)
SELECT *
FROM Employee
WHERE ParentID = :parent_id
ORDER BY LastName, FirstName, ID;
查询 - 给定员工的后代:
与整棵树相同的查询,但起点不同
(父级由绑定变量:parent_id
给出)
SELECT *
FROM Employee
START WITH ParentID = :parent_id
CONNECT BY PRIOR ID = ParentID
ORDER SIBLINGS BY LastName, FirstName, ID;
查询 - 员工及其祖先:
与之前的查询类似,但 CONNECT BY
颠倒了,您不需要对兄弟姐妹进行排序,因为每个员工只有一名直属经理。
(雇员由绑定变量:employee_id
给出)
SELECT *
FROM Employee
START WITH ID = :employee_id
CONNECT BY PRIOR ParentID = ID;
查询 - 员工的经理:
与上一个查询相同,但带有过滤器 LEVEL = 2
以仅获取直接父行。
(雇员由绑定变量:employee_id
给出)
SELECT e.*
FROM Employee e
WHERE LEVEL = 2
START WITH ID = :employee_id
CONNECT BY PRIOR ParentID = ID;