资源描述:
《数据库概论 递归查询.pptx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第7章递归查询提纲层次结构递归查询简介层次结构的关系表示方式递归查询在SQL中的实现HierachyidProlog与Datalog层次结构数据结构树:职工之间的领导联系有向图:零件之间的构成联系无向图:交通网络操作需求返回指定节点的所有子(父)节点,显示格式改变隶属关系环路检测生成传递闭包最短路径层次结构的例子trikewheelframespoketireseatpedalrimtubeAssemblypartsubpartqtytrikewheel3trikeframe1frameseat1framepedal1wheelspoke2wh
2、eeltire1tirerim1tiretube1组成trike的零件有哪些?R.part,S.subpart(Assemble)R.part,S.subpart(R.subpart=S.part(R(Assemble)S(Assemble))AssemblypartsubparttrikewheeltrikeframeframeseatframepedalwheelspokewheeltiretirerimtiretubeAssemblypartsubparttrikeseattrikepedaltrikespoketriketi
3、rewheelrimwheeltubeR.part,T.subpart(R.subpart=S.partS.subpart=T.part(R(Assemble)S(Assemble)T(Assemble))Assemblypartsubparttrikerimtriketube对于树、图等数据结构,其关系存储有以下三种方式:邻接表adjacent(child,parent)物化路径materialize_path(node,path)嵌套集合nested_net(node,left_value,right_value)层次结构的
4、关系表示方式ABDECF层次结构的关系表示方式:邻接表Adjacent(child,parent)childparentBACADBEBFC层次结构的关系表示方式:物化路径materialize_path(node,path)nodepathA.AB.A.BC.A.CD.A.B.DE.A.B.EF.A.C.FABDECF层次结构的关系表示方式:嵌套集合A(1-12)B(2-7)D(3-4)E(5-6)C(8-11)F(9-10)nested_net(node,left_value,right_value):nodeLeft_valueRight
5、_valueA112B27C811D34E56F910递归查询:OracleConnectBySelectpart,subpartFromComponentsStartwithpart=‘trike’Connectbypriorsubart=part(上一条的subpart是本条的part)递归查询:SQLServerWITHRecursiveCTEAS(SELECTFROMBaseTableUNIONALLSELECTFROMRecursiveCTE)SELECT*FROMRecursiveCTE;定位点成员AnchorMember递归成员R
6、ecursiveMember递归查询:SQLServerwithComponents(part,subpart)as(selectpart,subpartfromAssembly)unionall(selectA.part,C.subpartfromAssemblyA,ComponentsCwhereA.subpart=C.part)select*fromComponentswherepart=‘trike’declare@rootasINT;set@root=3;withSubsCTEas(selectempid,ename,0aslvlfr
7、omempwhereempid=@rootunionallselectC.empid,C.ename,P.lvl+1fromSubsCTEasPjoinempASConC.mgrid=P.empid)select*fromSubsCTE;emp(empid,ename,mgrid)createfunctiondbo.fn_subordinates(@rootasint)returns@SubsTable(empidintnotnullprimarykey,levelintnotnull)asbegindeclare@lvlasint;set@l
8、vl=0;--Initializelevelcounterwith0insertinto@Subs(empid,level)--Insertrootn