熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle--樹的使用(Connect By)

2013-11-13 12:46:15  來源: Oracle 

  表    tree
  字段   master
       sub
       sales
  insert into tree values
  (     ); 
  insert into tree values   
  (     );     
  insert into tree values
  (     );          
  insert into tree values
  (     );
  insert into tree values
  (     );
  insert into tree values
  (     );
  
  SQL> select * from tree;
  MASTER   SUB       SALES
  
  主    主        
  主    主        
  主    主        
  主    主        
  主    主        
  主    主         
  
  如果用樹型結構表示如下:
             
            
      
      
             
            
      
      
  
  SQL> select * from tree                
  start with sub=     相當於普通sql的where條件
  connect by prior master=sub; 遍歷的順序是sub先於master遍歷也就是說從sub往上遍歷一直到master(根節點)
    
  MASTER   SUB       SALES
  
  主    主        
  
  
  SQL> select * from tree                
  start with master=
  connect by prior master=sub; sub往上遍歷至根節點(參考一下樹型圖)              
      
  MASTER   SUB       SALES      
         
  主    主           這條是自己本身也就是第一遍遍歷
  主    主          這是第次遍歷我們從樹型圖可以看到往上遍歷是     
  主    主              
  主    主              
                        
                         
                        
  好我們關看上面可能還是不好理解我們加入一個樹結構專用函數sys_connect_by_path便於理解
  
  SQL> select sys_connect_by_path(MASTER/) from tree  master表示我遍歷的起點只找在master列中存在的如下例只要為起點並以/為分割符
  start with master=
  connect by prior master=sub;  往根節點遍歷
      
  SYS_CONNECT_BY_PATH(MASTER/)
  
  /主             遍遍歷
  /主/主          遍遍歷
  /主             條master=的記錄的第次遍歷
  /主/主          條master=的記錄的第次遍歷
  
  SQL> select sys_connect_by_path(MASTER/) from tree 起點為sub=時MASTER=主
  start with sub=
  connect by prior master=sub;
      
  SYS_CONNECT_BY_PATH(MASTER/)
  
  /主
  /主/主
  /主
  /主/主
  
  SQL> select sys_connect_by_path(MASTER/)submaster from tree  
  start with sub is not null
  connect by prior master=sub; 
      
  SYS_CONNECT_BY_PATH(MASTER/ SUB    MASTER
  
  /主              主    主 找主到根的路徑這裡根是主他自己
  /主              主    主 
  /主              主    主 
  /主/主           主    主 找主到根的路徑這裡根是主
  /主              主    主
  /主/主           主    主 
  /主              主    主 
  /主/主           主    主
  /主              主    主
  /主/主           主    主  
  select sys_connect_by_path(MASTER/)submaster from tree                
  start with sub is not null
  connect by prior sub = master;                       
  
  SYS_CONNECT_BY_PATH(MASTER/ SUB    MASTER
  
  /主              主    主
  /主/主           主    主
  /主/主           主    主
  /主              主    主
  /主/主           主    主
  /主/主           主    主
  /主              主    主
  /主              主    主
  /主              主    主
  /主              主    主
From:http://tw.wingwit.com/Article/program/Oracle/201311/16554.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.