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
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
相关文章推荐
- 分层查询中的start with和connect by用法
- connect by 和 start with 的用法 共享
- 【oracle sql】 最基本的connect by的用法
- 小议常被忽略的a标签:visited属性的特殊用法
- 小议C#的用法(四)(委托)
- 小议SQL语句中JOIN的用法
- 数据库学习笔记---connect by的简单用法(转载)
- 小议C#的用法(三)
- oracle树操作查询start with和connect by用法和理解
- CONNECT BY用法总结
- ORACLE有意思的树结构用法CONNECT BY
- Java scanner split useDelimiter 用法小议
- oracle查询之substr、instr、connect by 用法小结
- 小议C#的用法五(ref,out,params)
- 数据库学习笔记---connect by的简单用法
- [Oracle SQL]最基本的connect by的用法
- 最基本的connect by的用法
- 小议日记的重要性与用法
- Oracle “CONNECT BY” 用法
- [Oracle SQL]最基本的connect by的用法