Connect BY Prior Start With....Connect BY...用來實現SQL的層次查詢,經常會被用到一個表中存在遞歸關係的時候.
語法:
大致語法: select * from Table_Name Where 條件1 Connect by 條件2 Start with 條件3
其中Connect by 條件2 與Start With 條件3 語句放置的先後順序不影響查詢的結果。
【Where 條件1】 是根據 "Connect by 條件2 與Start With 條件3" 選擇出來的記錄進行過濾,是針對單條記錄的過濾,不考慮樹的結構。
【條件2】是指定構造樹的條件,以及對樹分支的過濾條件,在這裡執行的過濾會把符合條件的記錄及其下的所有子節點都過濾出來.
【條件3】是限定作為搜尋起始點的條件,如果是自上而下的搜尋則限定條件作為根節點的條件,如果是自下而上的搜尋則是限定作為自節點的條件.
實例:
Create Table
CREATE TABLE SFIS1.SYS_PROGRAM_FUNC
(
FUNC_CODE VARCHAR2(30 BYTE),
FUNC_NAME VARCHAR2(30 BYTE),
FUNC_TEXT VARCHAR2(30 BYTE),
FUNC_TYPE VARCHAR2(1 BYTE),
PARENT_CODE VARCHAR2(30 BYTE),
CREATER VARCHAR2(30 BYTE),
CREATDATA DATE,
IS_ENABLE VARCHAR2(1 BYTE) DEFAULT 1
)
InSert DATA
為了更直觀的顯示數據這裡附上一直圖表
FUNC_CODE |
FUNC_NAME |
FUNC_TEXT |
FUNC_TYPE |
PARENT_CODE |
IS_ENABLE |
SYS_FUNC |
SYS_FUNC |
SYSTME |
1 |
ROOT |
1 |
WIP_FUNC |
WIP_FUNC |
WIP |
1 |
ROOT |
1 |
LAB_FUNC |
LAB_FUNC |
Label Center |
1 |
ROOT |
1 |
SAP_FUNC |
SAP_FUNC |
SAP TOOLS |
1 |
ROOT |
1 |
MENU_FUNC |
MENU_FUNC |
菜單管理 |
2 |
SYS_FUNC |
1 |
ROUT_FUNC |
ROUT_FUNC |
路由管理 |
2 |
WIP_FUNC |
1 |
CMD_FUNC |
CMD_FUNC |
指令管理 |
2 |
LAB_FUNC |
1 |
INTE_FUNC |
INTE_FUNC |
介面管理 |
2 |
SAP_FUNC |
1 |
|
|
|
|
|
|
SQL實現:
select FUNC_CODE,FUNC_TEXT,PARENT_CODE,is_Enable from SYS_PROGRAM_FUNC
where is_Enable='1'
START WITH FUNC_CODE in (select Func_code from SYS_PROGRAM_FUNC
where Func_type='1' )
CONNECT BY SYS_PROGRAM_FUNC.PARENT_CODE = PRIOR SYS_PROGRAM_FUNC.FUNC_CODE
關於樹狀查詢就說這些,與大家共同學習共同進步,有需要改進的地方大家給我留言,進行改善。