Oracle函數sys_connect_by_path 詳解

来源:http://www.cnblogs.com/supermandy/archive/2017/11/21/7873233.html
-Advertisement-
Play Games

Oracle函數sys_connect_by_path 詳解 語法:Oracle函數:sys_connect_by_path 主要用於樹查詢(層次查詢) 以及 多列轉行。其語法一般為: select ... sys_connect_by_path(column_name,'connect_symbo ...


Oracle函數sys_connect_by_path 詳解

語法:
Oracle函數:sys_connect_by_path 主要用於樹查詢(層次查詢) 以及 多列轉行。其語法一般為:
       select ... sys_connect_by_path(column_name,'connect_symbol')  from table 
       start with ... connect by ... prior
理解:
對於資料庫來說,根節點並不一定是在資料庫中設計的頂級節點,而是start with開始的地方。sys_connect_by_path函數就是從start with開始的地方開始遍歷,並記下其遍歷到的節點,start with開始的地方被視為根節點,將遍歷到的路徑根據函數中的分隔符,組成一個新的字元串。sys_connect_by_path函數用connect by來尋找下一條記錄,直到迭代找不到相應記錄為止。概念與遞歸類似,connect by指定遞歸(連接)條件,如果條件不滿足則遞歸結束。

1. 查找一個員工的所有下屬員工。

start with ename='King' connect by  prior empno=  mgr; 
我是這樣理解的:首先資料庫中的欄位:empno--empname--mgr;這裡從'King'開始,把'King'的編號做為管理編號,然後在'King'編號為管理員的員工就是他的下屬(迴圈方式)。

2. 查找一個員工的所有上司經理。

start with ename='King' connect by  prior mgr= empno;
我是這樣理解的:首先資料庫中的欄位:empno--empname--mgr;這裡從'King'開始,把'King'的編號做為員工編號,然後在'King'編號的gmr就是他的上司(迭代方式)。

下麵是實驗:

--CREAT TABLE emp
create table emp ( empno varchar2(5), ename varchar2(8), mgr varchar2(8));
--INSERT DATA
insert into emp (EMPNO, ENAME, MGR)
values ('1', 'jim', '7');

insert into emp (EMPNO, ENAME, MGR)
values ('2', 'tom', '7');

insert into emp (EMPNO, ENAME, MGR)
values ('3', 'tim', '7');

insert into emp (EMPNO, ENAME, MGR)
values ('4', 'lily', '7');

insert into emp (EMPNO, ENAME, MGR)
values ('5', 'mary', '7');

insert into emp (EMPNO, ENAME, MGR)
values ('6', 'tid', '7');

insert into emp (EMPNO, ENAME, MGR)
values ('7', 'King', '10');

insert into emp (EMPNO, ENAME, MGR)
values ('8', 'kenvin', '10');

insert into emp (EMPNO, ENAME, MGR)
values ('9', 'shema', '8');

insert into emp (EMPNO, ENAME, MGR)
values ('10', 'john', '0');

insert into emp (EMPNO, ENAME, MGR)
values ('0', 'root', '');

SELECT * FROM emp;

 

select sys_connect_by_path(ename,'>') tree from emp start with ename='King' connect by prior empno = mgr;

 

select sys_connect_by_path(ename,'/') tree from emp start with ename='King' connect by prior empno = mgr; --可以理解為查詢king的員工 ‘>’與‘/’只是一個輸出格式

 

select sys_connect_by_path(ename,'/') tree from emp start with ename='King' connect by empno= prior mgr; --可以理解為查詢king的領導 效果與connect by prior mgr= empno相同

select sys_connect_by_path(ename,'/') tree,level from emp start with ename='King' connect by prior mgr= empno;--可以理解為查詢king的領導

 

總結(自己理解):connect by prior column1 = column2 或者 connect by  column2 = prior column1 寫法都可以,

主要看prior寫在誰的前面,prior寫在誰的前面誰就作為父級值(參照值),也就是說[connect by prior column1 = column2]的意思就是是 按start with 條件查詢出的記錄行,以column1為參考值,查詢column2為column1值的記錄。

 

轉自:https://www.cnblogs.com/shulmblogs/archive/2011/09/29/2195236.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • IJKPlayer拖動播放進度會導致重新請求數據,未使用已經緩衝好的數據,所以應該儘量控制緩衝區大小,減少不必要的數據損失。 mMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max-buffer-size", 100 * 102 ...
  • 1、一個文件的基本框架為:文件名、文件地址、文件大小、文件最大的大小、文件的增量(Filegrowth)。 2、文件有mdf、ndf、ldf 三種文件的區別。 3、文件組可以進行文件的管理 FileGroup 預設的文件組是 Primary 日誌文件無文件組的概念,存在Log文件中。 4、 alte ...
  • 1.展示當前資料庫 所有表名(前提必須進入資料庫,進入資料庫語句:【use 資料庫名;】)mysql> show create table 表名; 2.看mysql支持哪些存儲引擎:mysql> show engines; 3.查看mysql當前預設的存儲引擎:mysql> show variabl ...
  • 以下為個人學習Redis的備忘錄--記憶體優化,基於Redis4.0.2 1.隨時查看info memory,瞭解記憶體使用狀況:127.0.0.1:6379> info memory# Memoryused_memory:2314624 //(位元組單位形式)used_memory_human:2.21 ...
  • 2017-11-21 17:51:04 select * from world.city; select countrycode from world.city; /*distinct關鍵字作用於所有列,不僅僅跟著的後面那列*/select distinct countrycode from wor ...
  • 1. 用戶登錄日誌表 xes_user_login_logs 如下: (1) 檢索登錄超過兩次的用戶ID(sql語句) (2) 檢索登錄超過兩次的總數(SQL語句) 2. ...
  • 問題現象: 當建立新表時會出現一個空白的視窗,敲擊鍵盤輸入後就會出現應用出錯,然後退出。 解決方案: 選中某個已經存在的表,再點右鍵,新建表就可以正常操作了。 ...
  • 1、介紹 MySQL資料庫設置讀寫分離,可以使對資料庫的寫操作和讀操作在不同伺服器上執行,提高併發量和響應速度。現在的網站一般大點的,都採用有資料庫主從分離、讀寫分離,既起到備份作用也可以減輕資料庫的讀寫的壓力,一直聽說過這些,但是從來沒有親自動手實踐過,今天有時間實踐一下,記錄下過程。 2、環境準 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...