Oracle中sql中的树结构.如何在SQL Oracle中显示树,子节点和父节点

Dev*_*All -1 sql oracle connect-by recursive-query hierarchical-data

我想在SQL中显示一个带有子节点和父节点的树结构.我有一张桌子:

Employee
-------------
ID (int)
FirstName (varchar)
LastName (varchar)
ParentID (int)
Job (varchar)
Run Code Online (Sandbox Code Playgroud)

代表一名员工.ParentID代表员工的经理.我想这个表只有这个结构.

  1. 我想展示整个树的结构.
  2. 我想只显示子节点
  3. 我想只显示父节点

SampleDataImage

MT0*_*MT0 9

查询 - 整个树结构:

SELECT *
FROM   Employee
START WITH ParentID IS NULL
CONNECT BY PRIOR ID = ParentID
ORDER SIBLINGS BY LastName, FirstName, ID;
Run Code Online (Sandbox Code Playgroud)

查询 - 给定员工的子女:

您不需要对此进行分层查询.
(父级由绑定变量给出:parent_id)

SELECT *
FROM   Employee
WHERE  ParentID = :parent_id
ORDER BY LastName, FirstName, ID;
Run Code Online (Sandbox Code Playgroud)

查询 - 给定员工的后代:

与整个树相同的查询但具有不同的起始点
(父节点由绑定变量给出:parent_id)

SELECT *
FROM   Employee
START WITH ParentID = :parent_id
CONNECT BY PRIOR ID = ParentID
ORDER SIBLINGS BY LastName, FirstName, ID;
Run Code Online (Sandbox Code Playgroud)

查询 - 员工及其祖先:

与之前的查询类似,但CONNECT BY反过来,您不需要订购兄弟姐妹,因为每个员工只有一名直接经理.
(员工由绑定变量给出:employee_id)

SELECT *
FROM   Employee
START WITH ID = :employee_id
CONNECT BY PRIOR ParentID = ID;
Run Code Online (Sandbox Code Playgroud)

查询 - 员工经理:

与前一个查询相同,但使用过滤器LEVEL = 2来获取直接父行.
(员工由绑定变量给出:employee_id)

SELECT e.*
FROM   Employee e
WHERE  LEVEL = 2
START WITH ID = :employee_id
CONNECT BY PRIOR ParentID = ID;
Run Code Online (Sandbox Code Playgroud)