版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据库概论第7章递归查询提纲层次结构递归查询简介层次结构的关系表示方式递归查询在SQL中的实现HierachyidProlog与Datalog层次结构数据结构树:职工之间的领导联系有向图:零件之间的构成联系无向图:交通网络操作需求返回指定节点的所有子(父)节点,显示格式改变隶属关系环路检测生成传递闭包最短路径层次结构的例子trikewheelframespoketireseatpedalrimtubeAssemblypartsubpartqtytrikewheel3trikeframe1frameseat1framepedal1wheelspoke2wheeltire1tirerim1tiretube1组成trike的零件有哪些?R.part,S.subpart(Assemble)R.part,S.subpart(R.subpart=S.part(R(Assemble)S(Assemble))AssemblypartsubparttrikewheeltrikeframeframeseatframepedalwheelspokewheeltiretirerimtiretubeAssemblypartsubparttrikeseattrikepedaltrikespoketriketirewheelrimwheeltubeR.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)层次结构的关系表示方式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_valueA112B27C811D34E56F910递归查询:OracleConnectBySelect part,subpartFrom ComponentsStartwith part=‘trike’Connectby priorsubart=part(上一条的subpart是本条的part)递归查询:SQLServerWITHRecursiveCTEAS(SELECTFROMBaseTableUNIONALLSELECTFROMRecursiveCTE)SELECT*FROMRecursiveCTE;定位点成员AnchorMember递归成员RecursiveMember递归查询:SQLServerwithComponents(part,subpart)as
(select part,subpart from Assembly) unionall
(select A.part,C.subpart from AssemblyA,ComponentsC where A.subpart=C.part)select*fromComponentswherepart=‘trike’declare@rootasINT;set@root=3;withSubsCTEas(select empid,ename,0aslvlfrom empwhere empid=@rootunionallselect C.empid,C.ename,P.lvl+1from SubsCTEasPjoinempASConC.mgrid=P.empid)select*fromSubsCTE;emp(empid,ename,mgrid)createfunctiondbo.fn_subordinates(@rootasint)returns@SubsTable( empid intnotnullprimarykey, level intnotnull)asbegin declare @lvlasint; set @lvl=0;--Initializelevelcounterwith0 insertinto@Subs(empid,level)--Insertrootnodeto@Subs select empid,@lvl from emp where empid=@root;while@@rowcount>0--whilepreviouslevelhadrowsbegin set@lvl=@lvl+1;--Incrementlevelcounter --Insertnextlevelofsubordinatesto@Subs insertinto@Subs(empid,level) select C.empid,@lvl from @SubsASP--P=Parent joinempASC --C=Child onP.lvl=@lvl-1--Filterparentsfrompreviouslevel and C.mgrid=P.empid;endreturn;endHierachyidhierarchyid表示层次结构中的位置,由应用程序来生成和分配hierarchyid值,使行与行之间的所需关系反映在这些值中createtableemp( NodeIDhierarchyidprimarykeyclustered, NodeLevelasNodeID.GetLevel(), enoint, enamechar(20), titlechar(20))Hierarchyiddeclare@roothierarchyid,@child1hierarchyid, @child2hierarchyid,@grandchild1hierarchyidinsertintoemp(NodeID,eno,ename,title)values(hierarchyid::GetRoot(),1,‘tom’,‘CEO’)set@root=hierarchyid::GetRoot()set@child1=@root.GetDescendant(null,null)insertintoemp(NodeID,eno,ename,title)values(@child1,2,‘bob’,‘VP’)Hierarchyidset@child2=@root.GetDescendant(@child1,null)insertintoemp(NodeID,eno,ename,title)values(@child2,3,‘Arm’,‘MS’)set@grandchild1=@child1.GetDescendant(null,null)insertintoemp(NodeID,eno,ename,title)values(@grandchild1,4,‘jerry’,‘PM’)Hierarchyid selectNodeID.ToString()asNodePath,*fromemp
selectNodeID.GetAncestor(2)asGrandPa,enamefromempwhereeno=4Hierarchyid其他方法IsDescendantOf(parentHierarchyid)如果当前节点的祖先是parentHierarchyid,则返回1GetReparentedValue(OldParent,NewParent)将节点从层次结构中的旧位置移到新位置层次结构索引深度优先:基于hierarchyid创建索引广度优先:基于GetLevel()列创建索引Prolog程序不是一系列动作,而是一组事实与规则的集合是说明性语言,而非过程性语言基于逻辑谓词事实:对象间的一种关系,或对象的属性规则:从一事实推出另一事实自然语言AfastcarisfunBilllikesacarifthecarisfun逻辑谓词fun(fast-car)likes(bill,car)iffun(car)Prolog程序规则likes(cindy,
Something)
iflikes(bill,Something)
事实likes(bill,cindy)likes(cindy,bill)likes(bill,dog)查询用户:likes(bill,cindy)系统:yes用户:likes(bill,What)系统:What=dog
What=cindy查询用户:likes(cindy,What)系统:What=bill
What=dog
What=cindyDatalog基本结构Datalog由一组规则构成Datalog规则用来定义视图Datalog规则使用位置来识别关系的属性名PROF(P#,PNAME,SAL,AGE,D#)给出退休了的老师的姓名和年龄v1(A,B):–PROF(O,A,P,B,Q),B>60?v1(A,B),B>80v1中所有年龄大于80的老师?v1(“王明”,B)v1中王明老师的年龄Datalog基本结构视图可以由多条规则来定义,视图中元组集合为所有规则所定义的元组集合的并tax-rate(A,0):–PROF(A,B,C,D,E),C<800tax-rate(A,5):–PROF(A,B,C,D,E),C>=800工资超过800的老师缴纳5%所得税,低于800的免缴v2(A):–S(A,B,C,D,E),notv3(A)v3(A):–SC(A,M,N)给出所有没有选课的学生学号Datalog规则可以使用否定Datalog中的递归Components(part,subpart):-Assembly(part,subpart,Qty)Components(part,su
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027届遵义市余庆县数学三上期末考试试题含解析
- 2027届河北秦皇岛度数学四年级第一学期期末教学质量检测试题含解析
- 2026年2季度护理之静疗专科理论考试试题
- 口服降糖药物的分类及临床应用
- 凌源市2027届数学三年级第一学期期末考试试题含解析
- 2026届广东省揭阳市高三第二次联考生物试卷含解析
- 2026中国新材料研发行业市场供需及投资规划评估研究
- 2026叶黄素酯在功能性软糖中的工艺适配性研究
- 2026中国职业电竞选手健康防护设备市场需求与产品开发现状报告
- 2026中国烟草产业市场供需态势分析及投资建议规划研究报告
- 民用机场机位资源智能分配系统建设指南(TCCAATB 0025-2022)
- 2009年江苏省连云港市中考数学真题【含答案、解析】
- 2024年抗体类药物FTO报告撰写操作手册-智慧芽
- 公司社保缴费管理制度
- 五轴联动加工中心操作与基础编程 第2版 课件 项目四VERICUT五轴加工仿真技术认知
- 心血管内科急危重症、循环系统疾病、介入护理护理常规
- 2024电工(三级)职业技能等级认定理论考试复习题库(含答案)
- 问题解决过程PSP-完整版
- YS-T 582-2013 电池级碳酸锂
- 杭州市劳务合同整理版
- 软件项目 过程和工作产品检查记录表全套
评论
0/150
提交评论