oracle中的樹狀查詢


今天閑來無事,把Oracle的樹狀查詢再看了一遍,以下是我的理解

Oracle的樹狀查詢語句很簡單SELECT 。。。START WITH condition CONNECT BY condition;

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

1.用二維表的形式記錄樹狀結構
2.查詢二維表來構造樹狀結構,一般都是根據一個對象向上查詢查出它所有的祖先,根據一個對象向下查詢查出它所有的子孫

樹狀結構的特點就是一個子只有一個父,一個父可以有多個子。那只要每一個對象知道了他的父對象,就可以手動的構造出樹狀結構。也就是說,有多少個對象在二維表中就需要多少行,每一個對象都有一個指出它的父對象是字段。
看圖中所示,二維表應該表示為
對象                      父對象

以下是創建表的命令

SQL> create table tree_t (id char,p_id char);

Table created.

SQL> insert into tree_t values('A',NULl);

1 row created.

SQL> insert into tree_t values('B','A');

1 row created.

SQL> insert into tree_t values('C','A');

1 row created.

SQL> insert into tree_t values('D','A');

1 row created.

SQL> insert into tree_t values('E','B');

1 row created.

SQL> insert into tree_t values('F','B');

1 row created.

SQL> insert into tree_t values('G','C');

1 row created.

SQL> insert into tree_t values('H','D');

1 row created.

SQL> insert into tree_t values('I','F');

1 row created.

SQL> insert into tree_t values('J','H');

1 row created.

SQL> insert into tree_t values('K','H');

1 row created.

SQL> commit;

Commit complete.
SQL> select * from tree_t;

那怎樣根據二維表中的記錄查詢一個對象的祖先和子孫呢,這就要用到SELECT 。。。START WITH condition CONNECT BY condition命令了

1.先要確定查詢哪個對象的祖先和子孫
這要用到START WITH condition,只要滿足條件的行,都可以做為查詢的對象,也就是說,在一個查詢中可以查詢多個對象的祖先和子孫

2.再確定對象的字段和父對象的字段,向上查詢還是向下查詢
CONNECT BY prior id = p_id        對象字段為id,父對象字段為p_id,向下查詢
CONNECT BY id = prior p_id        對象字段為id,父對象字段為p_id,向上查詢

下面是舉例
查詢ID = D的子孫

SQL> select * from tree_t start with id = 'D' connect by prior id = p_id;

查詢ID = D祖先

SQL> select * from tree_t start with id = 'D' connect by  id = prior p_id;

查詢P_ID = B的行的對象的祖先,這就是查詢多個對象,因為P_ID = B的對象有兩個,E和F,查詢E和F的祖先

SQL> select * from tree_t start with p_id = 'B' connect by  id = prior p_id;

本文轉自:http://blog.itpub.net/8745319/viewspace-569133


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM