描述树型结构表时,需要依此访问树结构的每个节点,一个节点只能访问一次,其访问的步骤如下:
1、从根节点开始
2、访问该节点
3、判断该节点有无未被访问的子节点,若有则转向它最左侧的未被访问的叶子节点,并执行第二步,若无则执行第四步
4、若该节点为根节点,则访问完毕,否则执行第五步
5、返回到该节点的父节点,并执行第三步
总之,扫描整个树结构的过程也既是中序遍历树的过程
Oracle中的SELECT语句可以用CONNECT BY...START WITH...子句实现递归查询,CONNECT BY是结构
化查询中用到的,其基本语法是:
SELECT * FROM tablename CONNECT BY {PRIOR 列名1=列名2|列名1=PRIOR 列名2} [START WITH]
CONNECT BY:
说明每行数据将是按层次顺序检索,并规定将表中的数据连入树型结构的关系中。
START WITH:
这是可选的,用来标识哪个节点作为查找树型结构的根节点,可以有一个或多个根节点。若它被忽略,则表示所有满足查询条件的节点作为根节点。
PRIOR:
运算符“PRIOR”必须置于连接关系的两列中某一个的前面。
对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构的顺序是自顶向下还是自底向上。
在连接关系中,除了可以使用列名外,还允许使用列表达式。
当PRIOR被置于CONNECT BY子句中等号的前面时,则强制从根节点到叶节点的顺序检索,即由父节点向子节点方向通过树结构,称之为自顶向下方式。
当PRIOR被置于CONNECT BY子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即由子节点向父节点方向通过树结构,称之为自底向上方式。
自底向上:查找过程中只有树中的一枝被显示,这是因为在树型结构中每一个节点只允许有一个父节
点。其查找过程是从开始节点起,找到其父节点,再由其父节点向上找到父节点的父节点。这样一直找到根节点为止,结果就是树中一枝的数据。
自顶向下:在自顶向下查找树型结构,不但可以从根节点开始,还可以定义任何节点为起始节点,以
些开始向下查找。这样查找的结果就是以该节点为开始节点的结构树中的一枝。
在具有树型结构的表中,每一行数据都是树型结构中的一个节点。由于节点所处的层次位置不同,所
以每行记录都可以有一个层号。层号根据节点与根节点的距离确定,不论从哪个节点开始,该起始根节点的层号始终为1,根节点的子节点为2,依次类推。
在查询中可以使用伪列LEVEL显示每行数据的有关层次。LEVEL将返回树型结构中当前节点的层次,我
们可以使用LEVEL来控制对树型结构进行遍历的深度。
可以使用WHERE来限定树型结构中的单个节点,以去掉树中的单个节点,但它却不影响其后代节点
(自顶向下)或前辈节点(自底向上)。
如:SELECT * FROM tablename where 条件表达式 CONNECT BY… START WITH…
去掉树型结构中的整个分枝(包括子节点或父节点)
如:SELECT * FROM tablename CONNECT BY 连接表达式 AND 条件表达式 START WITH…