基本语法
select … from tablename start with 条件1 connect by 条件2 where 条件3;
eg:select * from table
start with org_id = 'sdadsadd'
connect by prior id = parent_id;
表中存在两个字段:id,parent_id那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。
其中:
条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。
条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR org_id = parent_id;就是说上一条记录的org_id 是本条记录的parent_id,即本记录的父亲是上一条记录。
条件3 是过滤条件,用于对返回的所有记录进行过滤。
- START WITH 子句为可选项,用来标识哪个节点作为查找树型结构的根节点,指向的根节点可以有多个。
- CONNECT BY子句说明每行数据将是按层次顺序检索,规定将表中的数据连入树型结构的关系中。PRIOR运算符必须放置在连接关系的两列中某一个的前面。
- PRIOR被放置于等号前后的位置,决定查询时的检索顺序。PRIOR被置于CONNECT BY子句中等号的前面时,则强制从根节点到叶节点的顺序检索,称为自顶向下;PIROR运算符被置于CONNECT BY 子句中等号的后面时,则强制从叶节点到根节点的顺序检索,称为自底向上。
- 定义查起始节点 :自顶向下查询树结构时,可以定义任何节点为起始节点,以此开始向下查找。
- 使用LEVEL:具有树结构的表中,每一行数据都是树结构中的一个节点,每行记录都可以有一个层号。层号根据节点与根节点的距离确定。不论从哪个节点开始,该起始根节点的层号始终为1,根节点的子节点为2, 以此类推。
- 节点和分支的裁剪:使用WHERE子句来限定树型结构中的单个节点,以去掉树中的单个节点,但它却不影响其后代节点(自顶向下检索时)或前辈节点(自底向顶检索时)。
- 关于排序:树结构查询中可以使用ORDER BY 子句,来改变查询结果的显示顺序,不必按照遍历树结构的顺序。