日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Oracle中start with xx connect by prior 语句解析

發布時間:2025/3/12 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle中start with xx connect by prior 语句解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Oracle中start with xx connect by prior 語句解析

? Oracle這種的start with語句主要對B型樹的數據進行遞歸查詢.可以指定數據樹上的任一節點,然后查找到它所有的子節點或者父節點.

? 現在有如下圖的數據:

  • 我們先想數據庫插入數據,這里用到oracle的批量插入寫法

    # 1 建表 CREATE TABLE START_WITH ( sub_levels VARCHAR2(255) NOT NULL , super_levels VARCHAR2(255) DEFAULT '' ?NULL ) NOCOMPRESS ; ? # 批量插入方法1 INSERT INTO START_WITH(sub_levels,super_levels) select ?'2','1' from dual union all select '3','1' from dual; ? # 批量插入方法2 INSERT ALL INTO START_WITH(sub_levels,super_levels) VALUES ('4','2') INTO START_WITH VALUES ('5','2') INTO START_WITH VALUES ('6','3') INTO START_WITH VALUES ('7','3') INTO START_WITH VALUES ('8','4') INTO START_WITH VALUES ('9','4') select 1 from dual; # 正常寫法 insert into START_WITH(sub_levels,super_levels) values ('10','8');
  • 使用start with 實例1 -->>查詢指定節點下的所有子節點

    # 實例1 : 查詢指定節點下的所有子節點 select * from START_WITH start with sub_levels = '2' connect by prior sub_levels = super_levels order by super_levels,sub_levels;

    上面的查詢結果如下:

    現在對start with的用法進行解析.

    2.1 start with sub_levels = '2' 這段sql相當進行一個查詢 select * from START_WITH where sub_levels = '2' ;

    我們能得到

    2.2 接著看connect by prior sub_levels = super_levels 這段sql 其中的prior sub_levels 表示將2.1中結果的sub_levels作為現在的值,此時這句sql相當于

    ? connect by 2 = super_levels 這句sql我們可以看做是一個新的查詢

    ? select * from START_WITH super_levels = 2

    ? 我們能得到結果

    ? 接著程序會對我么sub_levels 為4的情況執行start with語句和connect by 語句,依次遞歸直到最后一個子級為止.

    2.3 我們可以將整個查詢過程看做是如下流程

    ?

  • 使用start with 實例2 : -->> 查詢指定節點下的所有父節點

    # 實例2 : 查詢指定節點下的所有父節點 select * from START_WITH start with sub_levels = '8' connect by prior super_levels = sub_levels order by super_levels,sub_levels;

    ? 結果如下:

    查詢過程相當于:

  • 其余兩查詢

    select * from START_WITH start with super_levels = '2' connect by prior sub_levels = super_levels order by super_levels,sub_levels;

  • select * from START_WITH start with super_levels = '8' connect by prior super_levels = sub_levels order by super_levels,sub_levels;

  • 總結

    通過上面的結果我們可以發現如下規律

    a. 當在prior 后跟子級時是自上而下的查詢所有的子節點

    b. 當在prior后更父級時是自下而上的查詢所有的父節點

  • 總結

    以上是生活随笔為你收集整理的Oracle中start with xx connect by prior 语句解析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。