1. 程式人生 > >Oracle樹形結構的sql語句

Oracle樹形結構的sql語句

ORACLE提供了一種樹形結構用來實現層次查詢:

  •     START WITH :指定記錄是根節點的條件。根節點可以有多個。
  •     CONNECT BY :指定記錄之間是父節點和子節點關係的條件。查找出含有子節點的父節點的條件
  •     PRIOR :指定父節點記錄的引用。
  •     SIBLINGS :指定樹的排序。同一父節點下的兄弟節點的順序。

語法:

    SELECT 。。。START WITH condition CONNECT BY condition;

Oracle使用樹狀結構的目的是:

1.用二維表的形式記錄樹狀結構

2.查詢二維表來構造樹狀結構,一般都是根據一個物件向上查詢查出它所有的祖先,根據一個物件向下查詢查出它所有的子孫

3.樹狀結構的特點就是一個子只有一個父,一個父可以有多個子。那隻要每一個物件知道了他的父物件,就可以手動的構造出樹狀結構。也就是說,有多少個物件在二維表中就需要多少行,每一個物件都有一個指出它的父物件是欄位。

樹在資料庫表中的儲存結構,如下:

  1. createtable TREE  (  
  2.    ID                   NUMBER                          notnull,    //主鍵  
  3.    PID                  NUMBER                          notnull,    //父節點id  
  4.    ORDER_ID             NUMBER                          not
    null,    //排序id  
  5.    NODE_NAME            VARCHAR2(100)                   notnull,    //節點名稱  
  6.    constraint PK_TREE primarykey (ID)  
  7. );  

例項sql語句如下:

  1. SELECT * FROM tree
  2. START WITH pid = 0
  3. CONNECT BY PRIOR id = pid
  4. 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,向上查詢