START WITH...CONNECT BY PRIOR簡單使用

發表於2007-11-17

START WITH...CONNECT BY PRIOR簡單使用

[@more@]

1、測試環境的建立

SQL> CREATE TABLE TBL_TEST
2 (
3 ID NUMBER,
4 NAME VARCHAR2(10),
5 PID NUMBER
6 );

表已建立。

SQL> INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('1','10','0');

已建立 1 行。

SQL> INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('2','11','1');

已建立 1 行。

SQL> INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('3','20','0');

已建立 1 行。

SQL> INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('4','12','1');

已建立 1 行。

SQL> INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('5','121','2');

已建立 1 行。

SQL> INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('6','121','3');

已建立 1 行。


從樹根到樹葉:

SQL> select * from TBL_TEST
2 start with id=1
3 connect by prior id = pid;

ID NAME PID
---------- ---------- ----------
1 10 0
2 11 1
5 121 2
4 12 1


從樹葉到樹根:
SQL> select * from TBL_TEST
2 start with id=5
3 connect by prior pid = id;

ID NAME PID
---------- ---------- ----------
5 121 2
2 11 1
1 10 0

connect by 是結構化查詢中用到的,其基本語法是:
select ... from tablename start by cond1
connect by cond2
where cond3;

簡單說來是將一個樹狀結構儲存在一張表裡

COND1是根結點的限定語句,當然可以放寬限定條件,以取得多個根結點,實際就是多棵樹。

COND2是連線條件,其中用PRIOR表示上一條記錄,比如 CONNECT BY PRIOR ID=PRAENTID就是說
上一條記錄的ID是本條記錄的PRAENTID,即本記錄的父親是上一條記錄。

COND3是過濾條件,用於對返回的所有記錄進行過濾。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24870090/viewspace-982884/,如需轉載,請註明出處,否則將追究法律責任。

相關文章