Oracle樹形結構的sql語句
阿新 • • 發佈:2019-02-05
ORACLE提供了一種樹形結構用來實現層次查詢:
- START WITH :指定記錄是根節點的條件。根節點可以有多個。
- CONNECT BY :指定記錄之間是父節點和子節點關係的條件。查找出含有子節點的父節點的條件
- PRIOR :指定父節點記錄的引用。
- SIBLINGS :指定樹的排序。同一父節點下的兄弟節點的順序。
語法:
SELECT 。。。START WITH condition CONNECT BY condition;
Oracle使用樹狀結構的目的是:
1.用二維表的形式記錄樹狀結構
2.查詢二維表來構造樹狀結構,一般都是根據一個物件向上查詢查出它所有的祖先,根據一個物件向下查詢查出它所有的子孫
3.樹狀結構的特點就是一個子只有一個父,一個父可以有多個子。那隻要每一個物件知道了他的父物件,就可以手動的構造出樹狀結構。也就是說,有多少個物件在二維表中就需要多少行,每一個物件都有一個指出它的父物件是欄位。
樹在資料庫表中的儲存結構,如下:
- createtable TREE (
- ID NUMBER notnull, //主鍵
- PID NUMBER notnull, //父節點id
- ORDER_ID NUMBER not
- NODE_NAME VARCHAR2(100) notnull, //節點名稱
- constraint PK_TREE primarykey (ID)
- );
例項sql語句如下:
- SELECT * FROM tree
- START WITH pid = 0
- CONNECT BY PRIOR id = pid
- ORDER SIBLINGS BY order_id
查詢出來的結果就是按樹排序的記錄集。
注意:
1.先要確定查詢哪個物件的祖先和子孫
這要用到START WITH condition,只要滿足條件的行,都可以做為查詢的物件,也就是說,在一個查詢中可以查詢多個物件的祖先和子孫
2.再確定物件的欄位和父物件的欄位,向上查詢還是向下查詢
CONNECT BY prior id = p_id 物件欄位為id,父物件欄位為p_id,向下查詢
CONNECT BY id = prior p_id 物件欄位為id,父物件欄位為p_id,向上查詢