1. 程式人生 > 其它 >SQL遞迴查詢

SQL遞迴查詢

----.遞迴查詢:對於表裡面的資料是以樹狀結構儲存的資料,可以利用這種查詢來直接獲取每一個節點上的資料。
--什麼是樹狀結構的資料
--例:比如SMITH和他的領導們
SMITH→FORD→JONES→KING
--這種結構就叫做樹狀結構的資料。

--語法:

SELECT 欄位名
FROM 表名
--WHERE 篩選條件
[START WITH 條件]
CONNECT BY PRIOR 欄位1=欄位2 --CONNECT BY翻譯為連線,我們可以把它理解為一個箭頭。

---欄位1與欄位2是父子關係,PRIOR在哪邊,哪邊就是父級

--例:查詢工號是7369的所有上級

SELECT ENAME
FROM EMP START WITH EMPNO=7369 CONNECT BY PRIOR MGR =EMPNO;

--另一種寫法:

SELECT ENAME, 
EMPNO, 
MGR, 
SYS_CONNECT_BY_PATH(ENAME, '->'),
SUBSTR(SYS_CONNECT_BY_PATH(ENAME, '->'), 3), --外面套一個擷取函式是為了把第一個名字之前的這個箭頭去掉,為了美觀。
--這裡用到了新的函式 sys_connect_by_path() 我理解為根據什麼的路徑進行連線(這個函式顯示的是一個路徑),如在例題中我們根據ename 將他們進行連線,後面的'->' 是指用->來連線他們,加上 substr 只是為了去掉第一個箭頭。
LEVEL --LEVEL也是一個偽列,用於遞迴查詢中,顯示該資料處於哪一級。 FROM EMP START WITH EMPNO = 7369 CONNECT BY EMPNO = PRIOR MGR;