[轉]Hierarchical Queries之LEVEL應用
文章中雖然給出了樹的遍歷方法,但是結果看上去不是很直觀。透過這個小文兒給大家介紹一下中可用的一個偽列“”,這個偽列可以顯示出資料的層次級別。
1.回憶一下這棵“樹”
A
/ \
B C
/ /
D E
/ \
F G
如果以A作為根節點,那麼,A就是LEVEL 1,第二行是LEVEL 2,第三行是LEVEL 3,以此類推……
2.再回憶一下刻畫這棵樹的T表資料
sec@ora10g> select * from t;
X Y Z
---------- ---------- ----------
A 1
B 2 1
C 3 1
D 4 2
E 5 3
F 6 4
G 7 4
7 rows selected.
3.直入主題,引入“LEVEL”偽列。直接可以得到每一條記錄的層次級別。
sec@ora10g> select x, y, z, level from t start with x = 'A' connect by prior y=z;
X Y Z LEVEL
---------- ---------- ---------- ----------
A 1 1
B 2 1 2
D 4 2 3
F 6 4 4
G 7 4 4
C 3 1 2
E 5 3 3
7 rows selected.
透過上面查詢,可以很清楚地知道每條記錄所處的級別,可以很直接地知到誰是您的直接Boss!
找Boss的過程:從當前記錄向上查詢,找到的第一個比自己level值小的記錄便是您的頂頭上司。
例如要得到E的頂頭上司:E的level是3,向上查詢到第一個比3小的記錄是C(C的level是2),所以C是E的直接領導。
例如要得到C的頂頭上司:C的level是2,向上查詢到第一個比2小的記錄是A(A的level是1),所以A是C的直接領導。
4.LEVEL偽列小應用其一,使用lpad函式輔助給出記錄的層次關係。
sec@ora10g> select x, y, z, level, lpad(x,level,'>') lpad from t start with x = 'A' connect by prior y=z;
X Y Z LEVEL LPAD
---------- ---------- ---------- ---------- ---------------------
A 1 1 A
B 2 1 2 >B
D 4 2 3 >>D
F 6 4 4 >>>F
G 7 4 4 >>>G
C 3 1 2 >C
E 5 3 3 >>E
7 rows selected.
不用多說,七條記錄的層次級別不言自明。
5.LEVEL偽列小應用其二,得到連續遞增的等差序列。
sec@ora10g> select level, 2*level, 3*level from dual connect by level <= 10;
LEVEL 2*LEVEL 3*LEVEL
---------- ---------- ----------
1 2 3
2 4 6
3 6 9
4 8 12
5 10 15
6 12 18
7 14 21
8 16 24
9 18 27
10 20 30
10 rows selected.
6.LEVEL偽列小應用其三,完成表資料的初始化。
1)建立待初始化資料的測試表T_LEVEL
sec@ora10g> create table t_level (x number, y number);
Table created.
2)使用層次查詢完成三條初始化資料的插入
sec@ora10g> insert into t_level select level, dbms_random.random from dual connect by level <= 3;
3 rows created.
sec@ora10g> commit;
Commit complete.
3)驗證初始化的三條資料
sec@ora10g> select * From t_level;
X Y
---------- ----------
1 1229751406
2 -1.937E+09
3 158774029
7.LEVEL偽列小應用其四,“”的另外一種實現方法。
sec@ora10g> colfor a8
sec@ora10g> select substr ('secooler', rownum, 1) "secooler" from dual connect by rownum <= length('secooler');
secooler
--------
s
e
c
o
o
l
e
r
8 rows selected.
“乾坤大挪移”初級實現請參見文章《【】“乾坤大挪移”》http://space.itpub.net/519536/viewspace-622309
8.小結
本文透過幾個有趣的例子給大家簡單介紹了層次查詢中的LEVEL偽列的用法,希望對大家有幫助。
1.回憶一下這棵“樹”
A
/ \
B C
/ /
D E
/ \
F G
如果以A作為根節點,那麼,A就是LEVEL 1,第二行是LEVEL 2,第三行是LEVEL 3,以此類推……
2.再回憶一下刻畫這棵樹的T表資料
sec@ora10g> select * from t;
X Y Z
---------- ---------- ----------
A 1
B 2 1
C 3 1
D 4 2
E 5 3
F 6 4
G 7 4
7 rows selected.
3.直入主題,引入“LEVEL”偽列。直接可以得到每一條記錄的層次級別。
sec@ora10g> select x, y, z, level from t start with x = 'A' connect by prior y=z;
X Y Z LEVEL
---------- ---------- ---------- ----------
A 1 1
B 2 1 2
D 4 2 3
F 6 4 4
G 7 4 4
C 3 1 2
E 5 3 3
7 rows selected.
透過上面查詢,可以很清楚地知道每條記錄所處的級別,可以很直接地知到誰是您的直接Boss!
找Boss的過程:從當前記錄向上查詢,找到的第一個比自己level值小的記錄便是您的頂頭上司。
例如要得到E的頂頭上司:E的level是3,向上查詢到第一個比3小的記錄是C(C的level是2),所以C是E的直接領導。
例如要得到C的頂頭上司:C的level是2,向上查詢到第一個比2小的記錄是A(A的level是1),所以A是C的直接領導。
4.LEVEL偽列小應用其一,使用lpad函式輔助給出記錄的層次關係。
sec@ora10g> select x, y, z, level, lpad(x,level,'>') lpad from t start with x = 'A' connect by prior y=z;
X Y Z LEVEL LPAD
---------- ---------- ---------- ---------- ---------------------
A 1 1 A
B 2 1 2 >B
D 4 2 3 >>D
F 6 4 4 >>>F
G 7 4 4 >>>G
C 3 1 2 >C
E 5 3 3 >>E
7 rows selected.
不用多說,七條記錄的層次級別不言自明。
5.LEVEL偽列小應用其二,得到連續遞增的等差序列。
sec@ora10g> select level, 2*level, 3*level from dual connect by level <= 10;
LEVEL 2*LEVEL 3*LEVEL
---------- ---------- ----------
1 2 3
2 4 6
3 6 9
4 8 12
5 10 15
6 12 18
7 14 21
8 16 24
9 18 27
10 20 30
10 rows selected.
6.LEVEL偽列小應用其三,完成表資料的初始化。
1)建立待初始化資料的測試表T_LEVEL
sec@ora10g> create table t_level (x number, y number);
Table created.
2)使用層次查詢完成三條初始化資料的插入
sec@ora10g> insert into t_level select level, dbms_random.random from dual connect by level <= 3;
3 rows created.
sec@ora10g> commit;
Commit complete.
3)驗證初始化的三條資料
sec@ora10g> select * From t_level;
X Y
---------- ----------
1 1229751406
2 -1.937E+09
3 158774029
7.LEVEL偽列小應用其四,“”的另外一種實現方法。
sec@ora10g> colfor a8
sec@ora10g> select substr ('secooler', rownum, 1) "secooler" from dual connect by rownum <= length('secooler');
secooler
--------
s
e
c
o
o
l
e
r
8 rows selected.
“乾坤大挪移”初級實現請參見文章《【】“乾坤大挪移”》http://space.itpub.net/519536/viewspace-622309
8.小結
本文透過幾個有趣的例子給大家簡單介紹了層次查詢中的LEVEL偽列的用法,希望對大家有幫助。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26686207/viewspace-717048/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【層次查詢】Hierarchical Queries之LEVEL應用
- 【層次查詢】Hierarchical Queries之“樹的遍歷”
- 【層次查詢】Hierarchical Queries之處理順序
- 【層次查詢】Hierarchical Queries之CONNECT_BY_ISCYCLE偽列
- 【層次查詢】Hierarchical Queries之CONNECT_BY_ISLEAF偽列
- 【層次查詢】Hierarchical Queries之SYS_CONNECT_BY_PATH函式函式
- Hierarchical Queries 級聯查詢(樹狀結構查詢)
- 【層次查詢】Hierarchical Queries之親兄弟間的排序(ORDER SIBLINGS BY)排序
- 【層次查詢】Hierarchical Queries之尋根問祖(CONNECT_BY_ROOT一元運算子)
- sql之22 Hierarchical RetrievalSQL
- IPMP面試“秘笈”(Level C)(轉)面試
- GCD QueriesGC
- OS課 Level 2 實驗(2):軟體的部署與應用
- [轉發]RTH試用手記之“外場應用”
- PG: Utility queries
- CSS media queriesCSS
- 用AJAX開發智慧Web應用程式之基礎篇(轉)Web
- LeetCode之Sum of Even Numbers After Queries(Kotlin)LeetCodeKotlin
- Tripwire 應用(轉)
- Page Ability 之間的跳轉概念和應用分享
- Oracle效能最佳化之應用最佳化(轉)Oracle
- IT風險評估及風險管理之應用安全篇(轉)
- windows 2000活動目錄之應用篇(轉)Windows
- 淺談CSS3 響應式佈局--Media QueriesCSSS3
- Oracle Lock Information QueriesOracleORM
- F - Two Sequence Queries
- F. Scalar Queries
- [應用案例]OT應用案例之dasdig
- 使用media Queries實現一個響應式的選單
- TabStrip應用例子 (轉)
- oracle 按.反轉或按空格反轉之REGEXP_REPLACE應用Oracle
- SQL解析過程中的查詢轉換 - Transforming QueriesSQLORM
- Java操作Elasticsearch 之 [Java High Level REST Clientedit]JavaElasticsearchRESTclient
- Trees and XOR Queries AgainAI
- oracle 之特殊funxtions應用Oracle
- oracle之profile的應用Oracle
- oracle之 profile的應用Oracle
- 《反應式應用開發》之“什麼是反應式應用”