首页 > 其他分享 >DM层次查询

DM层次查询

时间:2024-07-16 16:29:18浏览次数:15  
标签:DM 层次 伪列 查询 CONNECT 子句 节点

一、前言

  通常有些情况需要查询获得某单位的上级或下级的信息,这种查询关系属于层级递归查询(又称:树状结构查询),该技术涉及根节点、父节点、子节点、叶子节点等特点运用,帮助我们很快定位出一个部门的组织层级关系,按预定的条件展示出来。

二、层次查询实现技术

2.1 层次查询子句

  层次查询中利用层次伪列、层次函数或层次操作符来明确层次查询结果中的相应层次信息。

  层次伪列
  1.LEVEL 该伪列表示当前元组在层次数据形成的树结构中的层数。LEVEL 的初始值为 1,即层 次数据的根节点数据的 LEVEL 值为 1,之后其子孙节点的 LEVEL 依次递增。
  2.CONNECT_BY_ISLEAF 该伪列表示当前元组在层次数据形成的树结构中是否是叶节点(即该元组根据连接条件不存在子结点)。是叶节点时为 1,否则为 0。
  3.CONNECT_BY_ISCYCLE 该伪列表示当前元组是否会将层次数据形成环,该伪列只有在层次查询子句中表明 NOCYCLE关键字时才有意义。如果元组的存在会导致层次数据形成环,该伪列值为 1,否 则为 0。

  层次操作符
  1.PRIOR 用在层次查询子句中,有PRIOR操作符修饰的列,是逻辑表达式中的父节点。
     PRIOR操作符可以出现在查询项、WHERE条件、GROUP BY子句、集函数参数中,表示父层记录对应的值。
  2.CONNECT_BY_ROOT 查询在层次查询结果中根节点的某列的值。

  层次函数
  SYS_CONNECT_BY_PATH(col_name,char)
  从根节点到当前节点路径上所有节点名为col_name的某列的值,中间使用char指定的符号分隔。
  如:/boss/manager/employee

  层次查询层内排序
  ORDER SIBLINGS BY <order_by_list> 指定层次查询中相同层次数据返回的顺序。 在层次查询中使用 ORDER SIBLINGS BY,必须与CONNECT BY 一起配合使用。 但是,ORDER SIBLINGSBY不能和GROUP BY一起使用。

  层次查询限制

  1. START WITH子句中不能使用层次查询的所有伪列、层次查询函数、操作符;
  2. ORDER SIBLINGS BY 子句中不能使用层次查询的所有伪列、层次查询函数、操作符、ROWNUM 以及子查询;
  3. 层次查询子句不能使用伪列 CONNECT_BY_ISLEAF、CONNECT_BY_ISCYCLE,SYS_CONNECT_BY_PATH 伪函数和 CONNECT_BY_ROOT 操作符;
  4. JOIN ON 子句中不允许出现层次查询的所有伪列、层次查询函数;
  5. PRIOR、CONNECT_BY_ROOT 操作符后以及 SYS_CONNECT_BY_PATH 第一个参数不能使用层次查询的所有伪列、层次查询函数、操作符、ROWNUM 以及子查询。但SYS_CONNECT_BY_PATH的第一个参数允许出现 LEVEL 伪列且第二个参数必须是常量字符串,CONNECT_BY_ROOT LEVEL 也被允许;
  6. 函数 SYS_CONNECT_BY_PATH 的最大返回长度为 8188,超长就会报错。函数SYS_CONNECT_BY_PATH 在一个查询语句中最多使用个数为 64;
  7. INI参数CNNTB_MAX_LEVEL表示支持层次查询的最大层次,默认为20000。该参数的有效取值为[1, 100000]。

2.2 递归with CTE子句

四、归纳总结
  connect by层级查询子句中未指定start with定位点成员,默认是以表中所有的节点为根节点进行先根遍历再进行层次查询。
  with…as短句实现递归查询比较灵活,提高SQL代码的可读性,同时也提升了执行性能(利用临时表暂存功能)。
  总体来说,connect by 比with as 在实现层级查询的时候,书写SQL较为简易,附加的操作符、函数、伪列丰富,可直接使用。

 

原文链接: DM层次查询 | 达梦技术社区 (dameng.com) 

原文链接: https://eco.dameng.com/community/training/16179ee13b51645e04934b5f43e677ee

标签:DM,层次,伪列,查询,CONNECT,子句,节点
From: https://www.cnblogs.com/leeno/p/18305526

相关文章

  • RDMA 高性能架构基本原理与设计方案
    RDMA的主要优点包括低延迟、高吞吐量、减少CPU负担和支持零拷贝网络。它允许数据直接在网络接口卡(NIC)和内存之间传输,减少了数据传输过程中的中间环节,从而显著降低了延迟。RDMA技术能够实现高速的数据传输,适用于需要大量数据交换的应用场景。由于数据传输不需要CPU的参与,CPU可......
  • dm/dp含义和接线
    dm/dp含义和接线DM:dataminus,DM是USB的数据线D-(白色线)DP:dataplusDP是USB的数据线D+(绿色线)usb接线排列方式是VCC,D-,D+,GNDDigitalPositive&DigitalMinusUSB的通信都是由主机发起的(iic类似)USB使用差分传输模式,有两条数据线,分别是:a.USB数据......
  • 达梦数据库DM8-DCP认证专家培训视频
    一、介绍达梦数据库(DMDB)是由中国自主研发的数据库管理系统,它是一款拥有完全自主知识产权的大型关系数据库。达梦数据库支持企业级应用,能够满足不同规模数据处理的需求,尤其在处理大规模数据、高并发访问和高可用性方面表现突出。它兼容国际主流数据库的标准,同时提供了丰富的数据安......
  • phpMyAdmin
    phpMyAdminhttps://www.phpmyadmin.net/phpMyAdminisafreesoftwaretoolwritteninPHP,intendedtohandletheadministrationofMySQLovertheWeb.phpMyAdminsupportsawiderangeofoperationsonMySQLandMariaDB.Frequentlyusedoperations(managi......
  • 【数据管理】PostgreSQL空间侦探!一文掌握数据库、表、索引占用大小查询技巧!
    在PostgreSQL中,了解数据库、表和索引的空间占用大小对于优化数据库性能、管理存储空间和识别潜在问题非常重要。通过使用PostgreSQL提供的系统函数和视图,我们可以轻松获取这些信息,并采取相应的措施来优化数据库。可以帮助我们优化数据库性能、管理存储空间和识别潜在的问题......
  • oracle 查询锁 && 解锁
    目录oracle查询锁&&解锁查询数据库中的锁查询被锁的对象查询阻塞查询数据库正在等待锁的进程查询会话之间锁等待的关系查询锁等待事件解决方案:oracle查询锁&&解锁查询数据库中的锁select*fromv$lock;select*fromv$lockwhereblock=1;查询被锁的对象select*fr......
  • Grafana Loki查询加速:如何在不添加资源的前提下提升查询速度
    GrafanaLoki查询加速:如何在不添加资源的前提下提升查询速度来自GrafanaLokiqueryacceleration:Howwespedupquerieswithoutaddingresources,介绍了Loki如何通过n-grams+布隆过滤器来加速查询。在过去的5年中,我们在平衡特性开发和支持大规模用户之时,改善了日志聚合......
  • 一篇学会多表查询
    多表查询1.多表查询分类讲解1)自连接题目:查询employees表,返回<员工worksfor老板>SELECTCONCAT(worker.last_name,'worksfor',manager.last_name)FROMemployeesworker,employeesmanagerWHEREworker.manager_id=manager.employee_id;2)内连接与......
  • 22 SAP前台操作手册-MM模块-采购管理-采购日常查询报表(SAP标准)
    0总体说明SAP实施项目中,到了第3个阶段-系统实现,在这个阶段,因为蓝图汇报已经结束,配置也差不多完成了,自开发还在进行中,SAP标准功能下,可以进行基础业务的前台操作了,在实现阶段的尾端,客户指定的关键用户(俗称KU-KeyUser)会进行前台业务操作和练习,提高熟练程度,同时需要在外部SAP顾......
  • 【QT开发】SQL查询QSqlQuery类详解及实战应用
    QSqlQuery是Qt提供的一个功能强大且灵活的SQL查询类,能够方便地与数据库进行交互。通过本篇文章的学习,你应该对QSqlQuery有了全面的理解,能够在自己的项目中正确使用它。QSqlQuery在用户界面中帮助你更好地管理和处理数据库数据,实现高效的数据库操作,有助于创建用户友好和高效......