您的位置:首页 > 其它

connect by 用法小议

2016-10-27 21:50 357 查看
生成连续序列或递归上下级树形结构时常用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ORALCE CONNECT BY LE