oracle中的分级查询

oracle中的分级查询

    

     下面以emp表和dept表为例。

 

SQL> select * from emp;   
    
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO   
----- ---------- --------- ----- ----------- --------- --------- ------   
 7369 SMITH      CLERK      7902 1980-12-17     800.00               20   
 7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30   
 7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30   
 7566 JONES      MANAGER    7839 1981-4-2      2975.00               20   
 7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30   
 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30   
 7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10   
 7788 SCOTT      ANALYST    7566 1982-12-9     3000.00               20   
 7839 KING       PRESIDENT       1981-11-17    5000.00               10   
 7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30   
 7876 ADAMS      CLERK      7788 1983-1-12     1100.00               20   
 7900 JAMES      CLERK      7698 1981-12-3      950.00               30   
 7902 FORD       ANALYST    7566 1981-12-3     3000.00               20   
 7934 MILLER     CLERK      7782 1982-1-23     1300.00               10   
    
14 rows selected   
    
SQL> select * from dept;   
    
DEPTNO DNAME          LOC   
------ -------------- -------------   
    10 ACCOUNTING     NEW YORK   
    20 RESEARCH       DALLAS   
    30 SALES          CHICAGO   
    40 OPERATIONS     BOSTON  

 

Oracle提供其他数据库没有的分级查询操作:

 

例如:希望通过某个员工回溯它的所有上级,包括上级的上级

 

select level,lpad(' ',level-1) ||empno empno,ename,mgr,deptno from emp start with empno=7369 connect by empno = prior mgr;

 

备注:

       level是oracle关键字表示分级级别,其中lpad(' ',level-1)函数是根据level是值生成level-1个空格。

 

  运行结果如下图所示:

 

 

 

又如:希望通过一次查询以树状结构显示emp表中所有的上下级关系

 

select level,lpad(' ',level-1) ||empno empno,ename,mgr,deptno from emp start with empno connect by prior empno = mgr;

 

运行结果去我看我的相册      o01.png,    由于空间的容量有限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值