为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的。
Oracle中的select语句可以用start with ... connect by prior ...子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是:
select ... fromwhere <过滤条件,用于对返回的所有记录进行过滤>
start with <根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树>
connect by [prior] <连接条件,其中用prior表示上一条记录,比如:connect by prior t.id = t.parent_id就是说上一条记录的id 是本条记录的parent_id,即本记录的父亲是上一条记录>
下面我们直接来看实例,查询'KING'的所有下属雇员。SQL语句如下:
select *
from scott.emp e
start with e.ename = 'KING'
connect by prior e.empno = e.mgr;
我们再来看另外一个实例,反过来查询'SMITH'的所有上司。SQL语句如下:
select *
from scott.emp e
start with e.ename = 'SMITH'
connect by e.empno = prior e.mgr;
通过上面的两个实例