电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Oracle遞歸查詢樹形數(shù)據(jù)實(shí)例代碼

瀏覽:120日期:2023-03-12 15:25:42
目錄
  • 概述
  • 1、數(shù)據(jù)準(zhǔn)備
  • 2 start with connect by prior遞歸查詢
    • 2.1 查詢所有子節(jié)點(diǎn)
    • 2.2 查詢所有父節(jié)點(diǎn)
    • 2.3 查詢指定節(jié)點(diǎn)的根節(jié)點(diǎn)
    • 2.4 查詢下行政組織遞歸路徑
  • 3 with遞歸查詢
    • 3.1 with遞歸子類
    • 3.2 遞歸父類
  • 4 MySQL 遞歸查找樹形結(jié)構(gòu)
    • 總結(jié)

      概述

      實(shí)際生活有很多樹形結(jié)構(gòu)的數(shù)據(jù),比如公司分為多個(gè)部門,部門下分為多個(gè)組,組下分為多個(gè)員工;省市縣的歸屬;頁面菜單欄等等。

      如果想查詢某個(gè)節(jié)點(diǎn)的父節(jié)點(diǎn)或者子節(jié)點(diǎn),一般通過表自身連接完成,但如果該節(jié)點(diǎn)的子節(jié)點(diǎn)還有多層結(jié)構(gòu),就需要使用遞歸調(diào)用。但如果數(shù)據(jù)量特別大,遞歸的次數(shù)指數(shù)級上升,而且查詢數(shù)據(jù)庫的次數(shù)也指數(shù)級上升,導(dǎo)致程序和數(shù)據(jù)庫壓力劇增,查詢時(shí)間特別長。那數(shù)據(jù)庫有沒有遞歸查詢語句呢?答案是肯定的。

      start with connect by prior 遞歸查詢

      1、數(shù)據(jù)準(zhǔn)備

      create table area_test(  id number(10) not null,  parent_id  number(10),  name       varchar2(255) not null);alter table area_test add (constraint district_pk primary key (id));insert into area_test (ID, PARENT_ID, NAME) values (1, null, "中國");insert into area_test (ID, PARENT_ID, NAME) values (11, 1, "河南省"); insert into area_test (ID, PARENT_ID, NAME) values (12, 1, "北京市");insert into area_test (ID, PARENT_ID, NAME) values (111, 11, "鄭州市");insert into area_test (ID, PARENT_ID, NAME) values (112, 11, "平頂山市");insert into area_test (ID, PARENT_ID, NAME) values (113, 11, "洛陽市");insert into area_test (ID, PARENT_ID, NAME) values (114, 11, "新鄉(xiāng)市");insert into area_test (ID, PARENT_ID, NAME) values (115, 11, "南陽市");insert into area_test (ID, PARENT_ID, NAME) values (121, 12, "朝陽區(qū)");insert into area_test (ID, PARENT_ID, NAME) values (122, 12, "昌平區(qū)");insert into area_test (ID, PARENT_ID, NAME) values (1111, 111, "二七區(qū)");insert into area_test (ID, PARENT_ID, NAME) values (1112, 111, "中原區(qū)");insert into area_test (ID, PARENT_ID, NAME) values (1113, 111, "新鄭市");insert into area_test (ID, PARENT_ID, NAME) values (1114, 111, "經(jīng)開區(qū)");insert into area_test (ID, PARENT_ID, NAME) values (1115, 111, "金水區(qū)");insert into area_test (ID, PARENT_ID, NAME) values (1121, 112, "湛河區(qū)");insert into area_test (ID, PARENT_ID, NAME) values (1122, 112, "舞鋼市");insert into area_test (ID, PARENT_ID, NAME) values (1123, 112, "寶豐市");insert into area_test (ID, PARENT_ID, NAME) values (11221, 1122, "尚店鎮(zhèn)");

      2 start with connect by prior遞歸查詢

      • start with 子句:遍歷起始條件。如果要查父結(jié)點(diǎn),這里可以用子結(jié)點(diǎn)的列,反之亦然。
      • connect by 子句:連接條件。prior 跟父節(jié)點(diǎn)列parentid放在一起,就是往父結(jié)點(diǎn)方向遍歷;prior 跟子結(jié)點(diǎn)列subid放在一起,則往葉子結(jié)點(diǎn)方向遍歷。parent_id、id兩列誰放在 “=” 前都無所謂,關(guān)鍵是prior跟誰在一起。
      • order by 子句:排序。

      常用的select項(xiàng):

      LEVEL:級別
      connect_by_root:根節(jié)點(diǎn)
      sys_connect_by_path:遞歸路徑

      2.1 查詢所有子節(jié)點(diǎn)

      select t.*,LEVELfrom area_test tstart with name ="鄭州市"connect by prior id=parent_id

      其實(shí),如果單層結(jié)構(gòu),使用表自身連接也可以實(shí)現(xiàn):

      select * from area_test t1,area_test t2 where t1.PARENT_ID = t2.ID and t2.name="鄭州市";

      當(dāng)查詢節(jié)點(diǎn)下有多層數(shù)據(jù):

      select t.*,LEVELfrom area_test tstart with name ="河南省"connect by prior id=parent_id

      select * from area_test t1,area_test t2 where t1.PARENT_ID = t2.ID and t2.name="河南省";

      如果使用自身連接,也只能查到子一級節(jié)點(diǎn)的數(shù)據(jù),需要遍歷子一級節(jié)點(diǎn),遞歸查詢每個(gè)子一級節(jié)點(diǎn)下的子節(jié)點(diǎn)。明顯麻煩很多!!!

      2.2 查詢所有父節(jié)點(diǎn)

      select t.*,levelfrom area_test tstart with name ="鄭州市"connect by prior t.parent_id=t.idorder by level asc;

      2.3 查詢指定節(jié)點(diǎn)的根節(jié)點(diǎn)

      select d.*,	   connect_by_root(d.id) rootid,	   connect_by_root(d.name) rootnamefrom area_test dwhere name="二七區(qū)"start with d.parent_id IS NULLconnect by prior d.id=d.parent_id

      select d.*,	   connect_by_root(d.id) rootid,	   connect_by_root(d.name) rootnamefrom area_test dstart with d.parent_id IS NULLconnect by prior d.id=d.parent_id

      2.4 查詢下行政組織遞歸路徑

      select id, parent_id, name, sys_connect_by_path(name, "->") namepath, levelfrom area_teststart with name = "平頂山市"connect by prior id = parent_id

      3 with遞歸查詢

      3.1 with遞歸子類

      with tmp(id, parent_id, name) as (	select id, parent_id, name    from area_test    where name = "平頂山市"    union all    select d.id, d.parent_id, d.name    from tmp, area_test d    where tmp.id = d.parent_id   )select * from tmp;

      3.2 遞歸父類

      with tmp(id, parent_id, name) as  (   select id, parent_id, name   from area_test   where name = "二七區(qū)"   union all   select d.id, d.parent_id, d.name   from tmp, area_test d   where tmp.parent_id = d.id   )select * from tmp;

      4 MySQL 遞歸查找樹形結(jié)構(gòu)

      參考文章:MySQL 遞歸查找樹形結(jié)構(gòu),這個(gè)方法太實(shí)用了

      參考文章:Oracle遞歸查詢

      總結(jié)

      到此這篇關(guān)于Oracle遞歸查詢樹形數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Oracle遞歸查詢樹形數(shù)據(jù)內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

      標(biāo)簽: Oracle
      主站蜘蛛池模板: 热工多功能信号校验仪-热电阻热电偶校验仿真仪-金湖虹润仪表 | 乐考网-银行从业_基金从业资格考试_初级/中级会计报名时间_中级经济师 | 焊接减速机箱体,减速机箱体加工-淄博博山泽坤机械厂 | 彭世修脚_修脚加盟_彭世修脚加盟_彭世足疗加盟_足疗加盟连锁_彭世修脚技术培训_彭世足疗 | 折弯机-刨槽机-数控折弯机-数控刨槽机-数控折弯机厂家-深圳豐科机械有限公司 | 门禁卡_智能IC卡_滴胶卡制作_硅胶腕带-卡立方rfid定制厂家 | 净化车间装修_合肥厂房无尘室设计_合肥工厂洁净工程装修公司-安徽盛世和居装饰 | 全自动在线分板机_铣刀式在线分板机_曲线分板机_PCB分板机-东莞市亿协自动化设备有限公司 | 乙炔气体报警装置|固定式氯化氢检测仪|河南驰诚电气百科 | 我爱古诗词_古诗词名句赏析学习平台| 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 冷藏车-东风吸污车-纯电动环卫车-污水净化车-应急特勤保障车-程力专汽厂家-程力专用汽车股份有限公司销售二十一分公司 | 气力输送_输送机械_自动化配料系统_负压吸送_制造主力军江苏高达智能装备有限公司! | 斗式提升机,斗式提升机厂家-淄博宏建机械有限公司 | 镀锌角钢_槽钢_扁钢_圆钢_方矩管厂家_镀锌花纹板-海邦钢铁(天津)有限公司 | 颚式破碎机,圆锥破碎机,制砂机-新乡市德诚机电制造有限公司 | 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 台式低速离心机-脱泡离心机-菌种摇床-常州市万丰仪器制造有限公司 | 钢结构-钢结构厂房-钢结构工程[江苏海逵钢构厂] | 商标转让-购买商标专业|放心的商标交易网-蜀易标商标网 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 液氮罐_液氮容器_自增压液氮罐-北京君方科仪科技发展有限公司 | 北京网站建设公司_北京网站制作公司_北京网站设计公司-北京爱品特网站建站公司 | 钣金加工厂家-钣金加工-佛山钣金厂-月汇好 | 汽车水泵_汽车水泵厂家-瑞安市骏迪汽车配件有限公司 | 非标压力容器_碳钢储罐_不锈钢_搪玻璃反应釜厂家-山东首丰智能环保装备有限公司 | 仿古建筑设计-仿古建筑施工-仿古建筑公司-汉匠古建筑设计院 | 强效碱性清洗剂-实验室中性清洗剂-食品级高纯氮气发生器-上海润榕科学器材有限公司 | ★济南领跃标识制作公司★济南标识制作,标牌制作,山东标识制作,济南标牌厂 | 青岛侦探调查_青岛侦探事务所_青岛调查事务所_青岛婚外情取证-青岛狄仁杰国际侦探公司 | 石磨面粉机|石磨面粉机械|石磨面粉机组|石磨面粉成套设备-河南成立粮油机械有限公司 | 搅拌磨|搅拌球磨机|循环磨|循环球磨机-无锡市少宏粉体科技有限公司 | 地磅-地秤-江阴/无锡地磅-江阴天亿计量设备有限公司_ | 烟气换热器_GGH烟气换热器_空气预热器_高温气气换热器-青岛康景辉 | (中山|佛山|江门)环氧地坪漆,停车场地板漆,车库地板漆,聚氨酯地板漆-中山永旺地坪漆厂家 | 采暖炉_取暖炉_生物质颗粒锅炉_颗粒壁炉_厂家加盟批发_烟台蓝澳采暖设备有限公司 | 订做不锈钢_不锈钢定做加工厂_不锈钢非标定制-重庆侨峰金属加工厂 | 有福网(yofus.com)洗照片冲印,毕业聚会纪念册相册制作个性DIY平台 | 西门子气候补偿器,锅炉气候补偿器-陕西沃信机电工程有限公司 | 温州食堂承包 - 温州市尚膳餐饮管理有限公司| 水性漆|墙面漆|木器家具漆|水漆涂料_晨阳水漆官网 |