SQL递归查询

----.递归查询:对于表里面的数据是以树状结构存储的数据,可以利用这种查询来直接获取每一个节点上的数据。
--什么是树状结构的数据
--例:比如SMITH和他的领导们
SMITH→FORD→JONES→KING
--这种结构就叫做树状结构的数据。

--语法:

SELECT 字段名
FROM 表名
--WHERE 筛选条件
[START WITH 条件]
CONNECT BY PRIOR 字段1=字段2 --CONNECT BY翻译为连接,我们可以把它理解为一个箭头。

---字段1与字段2是父子关系,PRIOR在哪边,哪边就是父级

--例:查询工号是7369的所有上级

SELECT ENAME
FROM EMP
START WITH EMPNO=7369
CONNECT BY PRIOR MGR =EMPNO;

--另一种写法:

SELECT ENAME, 
EMPNO, 
MGR, 
SYS_CONNECT_BY_PATH(ENAME, '->'),
SUBSTR(SYS_CONNECT_BY_PATH(ENAME, '->'), 3), --外面套一个截取函数是为了把第一个名字之前的这个箭头去掉,为了美观。
--这里用到了新的函数 sys_connect_by_path() 我理解为根据什么的路径进行连接(这个函数显示的是一个路径),如在例题中我们根据ename 将他们进行连接,后面的'->' 是指用->来连接他们,加上 substr 只是为了去掉第一个箭头。
LEVEL --LEVEL也是一个伪列,用于递归查询中,显示该数据处于哪一级。
FROM EMP
START WITH EMPNO = 7369
CONNECT BY EMPNO = PRIOR MGR;
posted @ 2022-05-08 20:32  潜摩羯  阅读(645)  评论(0编辑  收藏  举报