SQL遞迴查詢
阿新 • • 發佈:2022-05-08
----.遞迴查詢:對於表裡面的資料是以樹狀結構儲存的資料,可以利用這種查詢來直接獲取每一個節點上的資料。
--什麼是樹狀結構的資料
--例:比如SMITH和他的領導們
SMITH→FORD→JONES→KING
--這種結構就叫做樹狀結構的資料。
--語法:
SELECT 欄位名 FROM 表名 --WHERE 篩選條件 [START WITH 條件] CONNECT BY PRIOR 欄位1=欄位2 --CONNECT BY翻譯為連線,我們可以把它理解為一個箭頭。
---欄位1與欄位2是父子關係,PRIOR在哪邊,哪邊就是父級
--例:查詢工號是7369的所有上級
SELECT ENAMEFROM 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;