亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Oracle通過遞歸查詢父子兄弟節(jié)點(diǎn)方法示例

 更新時間:2018年01月14日 14:15:58   作者:dahaihh  
這篇文章主要給大家介紹了關(guān)于Oracle如何通過遞歸查詢父子兄弟節(jié)點(diǎn)的相關(guān)資料,遞歸查詢對各位程序員來說應(yīng)該都不陌生,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

說到Oracle中的遞歸查詢語法,我覺得有一些數(shù)據(jù)庫基礎(chǔ)的童鞋應(yīng)該都知道,做項(xiàng)目的時候應(yīng)該也會用到,下面本文就來介紹下關(guān)于Oracle通過遞歸查詢父子兄弟節(jié)點(diǎn)的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。

方法如下:

1、查詢某節(jié)點(diǎn)下所有后代節(jié)點(diǎn)(包括各級父節(jié)點(diǎn))

 // 查詢id為101的所有后代節(jié)點(diǎn),包含101在內(nèi)的各級父節(jié)點(diǎn)
 select t.* from SYS_ORG t start with id = '101' connect by parent_id = prior id

2、查詢某節(jié)點(diǎn)下所有后代節(jié)點(diǎn)(不包含各級父節(jié)點(diǎn))

select t.*
 from SYS_ORG t
 where not exists (select 1 from SYS_ORG s where s.parent_id = t.id)
 start with id = '101'
connect by parent_id = prior id

3、查詢某節(jié)點(diǎn)所有父節(jié)點(diǎn)(所有祖宗節(jié)點(diǎn))

 select t.*
 from SYS_ORG t
 start with id = '401000501'
 connect by prior parent_id = id

4、查詢某節(jié)點(diǎn)所有的兄弟節(jié)點(diǎn)(親兄弟)

 select * from SYS_ORG t
 where exists (select * from SYS_ORG s where t.parent_id=s.parent_id and s.id='401000501')

5、查詢某節(jié)點(diǎn)所有同級節(jié)點(diǎn)(族節(jié)點(diǎn)),假設(shè)不設(shè)置級別字段

with tmp as(
  select t.*, level leaf  
  from SYS_ORG t    
  start with t.parent_id = '0'  
  connect by t.parent_id = prior t.id)
select *        
  from tmp        
where leaf = (select leaf from tmp where id = '401000501');

這里使用兩個技巧,一個是使用了level來標(biāo)識每個節(jié)點(diǎn)在表中的級別,還有就是使用with語法模擬出了一張帶有級別的臨時表

 6、查詢某節(jié)點(diǎn)的父節(jié)點(diǎn)及兄弟節(jié)點(diǎn)(叔伯節(jié)點(diǎn))

with tmp as(
 select t.*, level lev
 from SYS_ORG t
 start with t.parent_id = '0'
 connect by t.parent_id = prior t.id) 
select b.*
from tmp b,(select *
   from tmp
   where id = '401000501' and lev = '2') a
where b.lev = '1'
union all
select *
from tmp
where parent_id = (select distinct x.id
    from tmp x, --祖父
      tmp y, --父親
      (select *
      from tmp
      where id = '401000501' and lev > '2') z --兒子
    where y.id = z.parent_id and x.id = y.parent_id);

這里查詢分成以下幾步。

首先,將全表都使用臨時表加上級別;

其次,根據(jù)級別來判斷有幾種類型,以上文中舉的例子來說,有三種情況:

(1)當(dāng)前節(jié)點(diǎn)為頂級節(jié)點(diǎn),即查詢出來的lev值為1,那么它沒有上級節(jié)點(diǎn),不予考慮。

(2)當(dāng)前節(jié)點(diǎn)為2級節(jié)點(diǎn),查詢出來的lev值為2,那么就只要保證lev級別為1的就是其上級節(jié)點(diǎn)的兄弟節(jié)點(diǎn)。

(3)其它情況就是3以及以上級別,那么就要選查詢出來其上級的上級節(jié)點(diǎn)(祖父),再來判斷祖父的下級節(jié)點(diǎn)都是屬于該節(jié)點(diǎn)的上級節(jié)點(diǎn)的兄弟節(jié)點(diǎn)。

最后,就是使用union將查詢出來的結(jié)果進(jìn)行結(jié)合起來,形成結(jié)果集。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Oracle收購TimesTen 提高數(shù)據(jù)庫軟件性能

    Oracle收購TimesTen 提高數(shù)據(jù)庫軟件性能

    Oracle收購TimesTen 提高數(shù)據(jù)庫軟件性能...
    2007-03-03
  • RAC cache fusion機(jī)制實(shí)現(xiàn)原理分析

    RAC cache fusion機(jī)制實(shí)現(xiàn)原理分析

    本文將詳細(xì)介紹RAC cache fusion機(jī)制實(shí)現(xiàn)原理,需要了解更多的朋友可以參考下
    2012-12-12
  • oracle數(shù)據(jù)庫sql的優(yōu)化總結(jié)

    oracle數(shù)據(jù)庫sql的優(yōu)化總結(jié)

    自己對oracle sql的一些優(yōu)化總結(jié),特分享下,方便需要的朋友
    2013-08-08
  • Oracle CBO優(yōu)化模式中的5種索引訪問方法淺析

    Oracle CBO優(yōu)化模式中的5種索引訪問方法淺析

    這篇文章主要介紹了Oracle CBO優(yōu)化模式中的5種索引訪問方法淺析,包含索引唯一掃描、索引范圍掃描、索引全掃描、索引跳躍掃描、索引快速全掃描等內(nèi)容,需要的朋友可以參考下
    2014-07-07
  • Oracle之TO_DATE用法詳解

    Oracle之TO_DATE用法詳解

    這篇文章主要介紹了Oracle之TO_DATE用法詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • db2與oracle的sql語句有什么不同

    db2與oracle的sql語句有什么不同

    Oracle和DB2都是關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),但它們的設(shè)計理念、特性及性能等方面存在一些顯著的差異,本文將詳細(xì)比較Oracle和DB2,幫助企業(yè)和數(shù)據(jù)庫管理員了解這兩個系統(tǒng)各自的優(yōu)勢和局限性,并指導(dǎo)用戶根據(jù)自己的業(yè)務(wù)需求作出合適的選擇
    2024-02-02
  • oracle 字符串轉(zhuǎn)成行

    oracle 字符串轉(zhuǎn)成行

    oracle 將以逗號隔開的字符串'85,86,87' 轉(zhuǎn)成行
    2009-06-06
  • 淺談Oracle 11g 發(fā)行版2 新安裝后關(guān)于登錄的一些基本操作

    淺談Oracle 11g 發(fā)行版2 新安裝后關(guān)于登錄的一些基本操作

    oracle 11g的兩個不同版本。11g剛發(fā)行時,是11g第一版,簡稱11.1,現(xiàn)在有個11g第二版,在功能上有了更多的改進(jìn),簡稱11.2。本文給大家介紹Oracle 11g 發(fā)行版2 新安裝后關(guān)于登錄的一些基本操作,需要的朋友可以參考下
    2015-10-10
  • Oracle實(shí)現(xiàn)透明數(shù)據(jù)加密的代碼示例

    Oracle實(shí)現(xiàn)透明數(shù)據(jù)加密的代碼示例

    透明數(shù)據(jù)加密(TDE)是一種用于保護(hù)數(shù)據(jù)庫中靜態(tài)數(shù)據(jù)的加密技術(shù),TDE通過自動加密數(shù)據(jù)庫文件和日志文件,確保數(shù)據(jù)在磁盤上是加密的,從而防止未經(jīng)授權(quán)的訪問,以下以 Microsoft SQL Server 為例,實(shí)現(xiàn) TDE 的步驟和代碼示例,需要的朋友可以參考下
    2024-09-09
  • 修改ORACLE數(shù)據(jù)庫密碼有效期的方法

    修改ORACLE數(shù)據(jù)庫密碼有效期的方法

    這篇文章主要介紹了修改ORACLE數(shù)據(jù)庫密碼有效期的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09

最新評論