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;