connect by 用法小议

来源:互联网 发布:文泰刻绘2002解密软件 编辑:程序博客网 时间:2024/06/05 18:56

生成连续序列或递归上下级树形结构时常用CONNECT BY来实现

1、CONNECT BY 的执行顺序

语法:[start with ...][where .....] connect by ...

先执行START WITH 后执行CONNECT BY,最后执行WHERE子句


2、生成序列注意事项,多用LEVEL,而少用ROWNUM,有时ROWNUM会引起问题

SQL> select level from dual connect by level<5;


     LEVEL
----------
         1
         2
         3
         4


SQL> select rownum from dual connect by rownum<5;


    ROWNUM
----------
         1
         2
         3
         4

当查询表中只有一条记录时,两种用法是相同的

但是当查询表中有多于一条记录时,两则的差异还是蛮大的


SQL> select * from t;


N
-
A
B


SQL> select rownum,level,n from t connect by level<=1;


    ROWNUM      LEVEL N
---------- ---------- -
         1          1 A
         2          1 B


SQL> select rownum,level,n from t connect by level<=2;


    ROWNUM      LEVEL N
---------- ---------- -
         1          1 A
         2          2 A
         3          2 B
         4          1 B
         5          2 A
         6          2 B


已选择6行。


SQL> select rownum,level,n from t connect by level<=3;


    ROWNUM      LEVEL N
---------- ---------- -
         1          1 A
         2          2 A
         3          3 A
         4          3 B
         5          2 B
         6          3 A
         7          3 B
         8          1 B
         9          2 A
        10          3 A
        11          3 B
        12          2 B
        13          3 A
        14          3 B


已选择14行。


SQL> select rownum,level,n from t connect by rownum<=1;


    ROWNUM      LEVEL N
---------- ---------- -
         1          1 A
         2          1 B


SQL> select rownum,level,n from t connect by rownum<=2;


    ROWNUM      LEVEL N
---------- ---------- -
         1          1 A
         2          2 A
         3          1 B


SQL> select rownum,level,n from t connect by rownum<=3;


    ROWNUM      LEVEL N
---------- ---------- -
         1          1 A
         2          2 A
         3          3 A
         4          1 B


假设表记录为N,层数为M

使用LEVEL获取的记录数为:N^M+N^(M-1)+...+N

使用ROWNUM获取的记录数为:M+N-1


0 0
原创粉丝点击