Connect by實現樹查詢的妙用
做了個實驗總結一下connect by樹查詢的用法:
SQL> select * from t_dept_temp;
DEPT_ID PARENT_ID DEPT_NAME AMOUNT
---------- ---------- ---------- ----------
1 1 2
2 1 1-2 15
3 1 1-3 8
4 2 1-2-4 10
5 2 1-2-5 9
6 3 1-3-6 17
7 3 1-3-7 5
8 3 1-3-8 6
已選擇8行。
SQL> desc t_dept_temp;
名稱 是否為空? 型別
----------------------------------------- -------- ----------------------------
DEPT_ID NOT NULL NUMBER(2)
PARENT_ID NUMBER(2)
DEPT_NAME VARCHAR2(10)
AMOUNT NUMBER(3)
接下來實現各種查詢的測試:
1.查詢dept_id=2以及所有下級部門:
SQL> select level treelevel,dept_id,parent_id,dept_name from t_dept_temp
2 start with dept_id=2
3 connect by parent_id = prior dept_id;
TREELEVEL DEPT_ID PARENT_ID DEPT_NAME
---------- ---------- ---------- ----------
1 2 1 1-2
2 4 2 1-2-4
2 5 2 1-2-5
2.查詢dept_id=4以及所有上級部門:
SQL> select level treelevel,dept_id,parent_id,dept_name from t_dept_temp
2 start with dept_id=4
3 connect by dept_id = prior parent_id;
TREELEVEL DEPT_ID PARENT_ID DEPT_NAME
---------- ---------- ---------- ----------
1 4 2 1-2-4
2 2 1 1-2
3 1 1
3.查詢dept_id=1以及所有下級部門:
SQL> select level treelevel,dept_id,parent_id,dept_name from t_dept_temp
2 start with dept_id=1
3 connect by parent_id = prior dept_id;
TREELEVEL DEPT_ID PARENT_ID DEPT_NAME
---------- ---------- ---------- ----------
1 1 1
2 2 1 1-2
3 4 2 1-2-4
3 5 2 1-2-5
2 3 1 1-3
3 6 3 1-3-6
3 7 3 1-3-7
3 8 3 1-3-8
已選擇8行。
4.查詢dept_id=1以及所有下級部門,但除了部門3 (排除樹枝,部門3下的所有節點也都排除)
SQL> select level treelevel,dept_id,parent_id,dept_name from t_dept_temp
2 start with dept_id=1
3 connect by parent_id=prior dept_id and dept_id <> 3;
TREELEVEL DEPT_ID PARENT_ID DEPT_NAME
---------- ---------- ---------- ----------
1 1 1
2 2 1 1-2
3 4 2 1-2-4
3 5 2 1-2-5
5.查詢dept_id=1以及所有下級部門,但除了部門3 (僅排除部門3,其下的所有節點都是包括的)
SQL> select level treeview, dept_id,parent_id,dept_name from t_dept_temp
2 where dept_id <> 3
3 start with dept_id=1
4 connect by parent_id = prior dept_id;
TREEVIEW DEPT_ID PARENT_ID DEPT_NAME
---------- ---------- ---------- ----------
1 1 1
2 2 1 1-2
3 4 2 1-2-4
3 5 2 1-2-5
3 6 3 1-3-6
3 7 3 1-3-7
3 8 3 1-3-8
已選擇7行。
注意這裡的where dept_id <> 3,他的執行是在connect by之後做的
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12361284/viewspace-129059/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 對DBGrid 的巧妙用法實現查詢 (轉)
- Oracle 樹查詢 效能最佳化紀實(start with, connect by)Oracle
- oracle中connect by prior實現遞迴查詢Oracle遞迴
- 10g樹形查詢新特性CONNECT_BY_ROOT的9i實現方式
- 10g樹形查詢新特性CONNECT_BY_ISLEAF的9i實現方式
- 10g樹形查詢新特性CONNECT_BY_ISCYCLE的9i實現方式(四)
- 10g樹形查詢新特性CONNECT_BY_ISCYCLE的9i實現方式(三)
- 10g樹形查詢新特性CONNECT_BY_ISCYCLE的9i實現方式(二)
- 10g樹形查詢新特性CONNECT_BY_ISCYCLE的9i實現方式(一)
- Mysql 實現樹狀遞迴查詢MySql遞迴
- 二叉查詢樹的實現——C++C++
- ORACLE 樹形查詢(connect by...start with...)的應用(三)Oracle
- ORACLE 樹形查詢(connect by...start with...)的應用(一)Oracle
- oracle中的遞迴sql查詢 connect by prior實現遞迴Oracle遞迴SQL
- Java實現遞迴查詢樹結構Java遞迴
- 二叉查詢樹概念及實現
- C#實現二叉查詢樹C#
- [轉載]使用Oracle樹形查詢應注意 - Start with / Connect byOracle
- 轉:C++實現的變種二分查詢法(折半查詢)--二叉查詢樹C++
- JavaScript實現簡單二叉查詢樹JavaScript
- MySQL實現樹狀所有子節點查詢的方法MySql
- Access查詢實現Mysql的 limit 查詢MySqlMIT
- 第 34 題:如何實現二叉查詢樹?
- 關於樹型結構資料遞迴查詢,轉非遞迴查詢的實現遞迴
- 利用樹形查詢實現部分分析函式功能函式
- B樹(多路查詢樹)
- connect by 樹形查詢在評估cardinality時存在著問題
- 多路查詢樹
- 平衡查詢樹
- oracle 樹查詢Oracle
- 樹形查詢
- B樹查詢,磁碟查詢資料
- 實現二叉搜尋樹的新增,查詢和刪除(JAVA)Java
- 使用JS去實現一個BST(二叉查詢樹)JS
- C++二叉查詢樹實現過程詳解C++
- SSH:hiberate實現資料的查詢(單查詢和全查詢)
- 二叉查詢樹的插入刪除查詢
- oracle樹形查詢Oracle