日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle树状排序,Oracle树状结构查询

發布時間:2025/3/8 编程问答 9 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle树状排序,Oracle树状结构查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

oracle用表的形式組織數據,某些數據還呈現樹狀結構,提供了對這些數據的組織、查詢等功能。在掃描樹結構表時,要依次訪問樹中的每一個節點,并且每個節點只能訪問一次,其步驟如下:

1:從根節點開始

2:訪問該節點

3:判斷該節點有無被訪問的子節點,若有,則轉向它最左側未被訪問的子節點,并執行第二步,否則執行第四步

4:若該節點為根節點,則訪問完畢,否則執行第五步

5:返回到該節點的父節點,并執行第三步驟

總之,整個掃描過程是一個中序遍歷樹的過程

1:樹結構描述

數據之間的層次關系(父子關系)通過表中列與列之間的關系來描述

select

connect by {prior col1 = col2 || col1 = prior col2 }

[start with ]

connect by子句說明數據按照層次順序檢索,并將數據連入樹形結構關系中

prior運算符必須放在連接關系的兩列中某一列的前面,從而確定查找順序是自上而下還是自下而上,連接關系中,可使用列名、列表達式

start with 子句為可選項,用來標識查找結構的根節點。若省略,則表示所有滿足條件的行作為根節點

2:關于prior

prior和父列子列的相對位置,決定著查詢方向。放在子節點前面是表示由父節點向子節點方向檢索,放在父節點前面時表示從子節點向父節點方向檢索,可以將prior想象成一個箭頭,放在誰的前面,就向那個方向檢索。

3:定義起始查找節點

不但可以從根節點開始,而且可以定義任何節點為起始節點

start with可指定一個或多個根節點

4:使用level

節點所處位置不同,每行記錄都有一個層號,層號有節點與根節點的距離決定。無論從哪個節點開始,該其實根節點的層號始終為1,依次類推

偽列level顯示每行數據的有關層次,返回屬性結構中當前節點的層次,可用來控制對樹形結構進行遍歷的深度,偽列level為數值型,可與lpad、rpad等結合進行數據展示

5:節點和分支的剪裁

where子句限定單個節點,而不影響其子節點(自上而下)或父節點(自下而上)

connect by 子句限定整個以當前節點為起始節點的整個分支

兩者可聯合使用

6:排序顯示

order by子句,改變查詢結果的顯示順序

在10g又增加了幾個新的特性,增強了connect by子句:

從9i開始,可通過sys_connect_by_path函數實現從父節點到當前行內容以”path“或者層次元素列表的形式顯示出來。sys_connect_by_path(child,'/')

connect_by_root,用在列名之前返回當前層的根節點(最高級節點的內容)

connect_by_isleaf,來判斷當前行是不是葉子,如果是葉子就會在偽列中顯示1

connect_by_iscycle,10g中增加對樹中環狀循環的處理;一旦數據中出現了循環記錄(如:兩個節點互為對方父節點),在10g以 前版本的數據庫中會錯誤提示”ora-01436。?!?#xff0c;只要指定nocycle可避免報錯,且通過connect_by_iscycle屬性就知道哪些 節點產生了循環,如果出現循環,connect_by_iscycle偽列顯示為1,否則顯示為0。

select connect_by_iscycle, dirindex, fatherindex, RPAD(' ', 2*(LEVEL-1)) || dirname

from t_tonedirlib

start with fatherindex = 666

connect by NOCYCLE fatherindex = prior dirindex

特殊用法:

得到1到10的一個序列

select rownum from dual

connect by rownum<=10

總結

以上是生活随笔為你收集整理的oracle树状排序,Oracle树状结构查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。