假设有组织数据表orgstdstruct,其中包含UNITID,PUNITID,UNITNAME等字段,其中PUNITID是本表UNITID字段的外键,那么在ORACLE中可以通过以下语句直接查询出具有层次关系的数据,使用起来非常方便。

select level,unitid,punitid,unitname from orgstdstruct
start with punitid is null
connect by prior unitid = punitid

语法结构如下:

SELECT [LEVEL],column,expr...

FROM table

[WHERE condition(s)]

[START WITH condition(s)]

[CONNECT BY PRIOR condition(s)];

其中LEVEL字段是可选的,表示查询出来的数据层级

在Oracle 10g中,增加了一个新函数,叫做CONNECT_BY_ISLEAF,如果行的值为0表示非叶子节点,1表示叶子节点,示例如下:

select level,unitid,punitid,unitname,

(case when connect_by_isleaf=1 then '叶子' else '不是叶子' end) isleaf

from orgstdstruct
start with punitid is null
connect by prior unitid = punitid

另外,Oracle 10g还提供了CONNECT_BY_ISCYCLE和NOCYCLE关键字来解决循环问题,示例如下:

select level,connect_by_iscycle,unitid,punitid,unitname from orgstdstruct
start with punitid is null
connect by nocycly prior unitid = punitid


这样可以避免循环参加查询操作,并且通过CONNECT_BY_ISCYCLY得到哪个节点发生循环,0表示未循环,1表示循环

遗憾的是这种语法目前SQLServer还未支持,也不是标准的T-SQL语法。

转载于:https://www.cnblogs.com/minbear/archive/2009/01/22/1379916.html

Oracle中针对层次数据所设计的专用SQL查询语句相关推荐

  1. oracle中导入dmp数据注意事项

    1.在oracle中导入dmp数据的时候,一般使用exp导出的是带有表结构的数据,这时候导入数据库,如果数据库中有这个表,就会报错,说已经存在这个表,无法创建,这时候imp导入语句中需要加入一句ign ...

  2. oracle分页数据,在Oracle中得到分页数据

    在Oracle中得到分页数据 得到DataSet的值 例子如下: /// /// 得到Colletion分页数据 /// public DataSet GetList(int PageIndex, i ...

  3. oracle自动释放表空间,Oracle中关于清除数据和释放表空间

    一.表的重命名 flashback table test2 to before drop rename to test3;--[to test3]将表重命名 drop table test3 purg ...

  4. 从Mysql某一表中随机读取n条数据的SQL查询语句

    若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...

  5. /*1. 查询SC表中的全部数据。*/ SELECT * FROM SC /*2. 查询计算机系学生的姓名和年龄。*/ SELECT Sname,Sex FROM Student WHERE Sd

    1.  查询SC表中的全部数据. SELECT * FROM SC 2.  查询计算机系学生的姓名和年龄. SELECT Sname,Sex FROM Student WHERE Sdept='计算机 ...

  6. Oracle中如何查找未使用绑定变量的SQL语句?

    Oracle中如何查找未使用绑定变量的SQL语句? 利用V$SQL 视图的 FORCE_MATCHING_SIGNATURE 字段可以识别可能从绑定变量或 CURSOR_SHARING 获益的 SQL ...

  7. 【DB笔试面试617】在Oracle中,和“表达式和条件评估”相关的查询转换有哪些?...

    ♣题目 部分 在Oracle中,和"表达式和条件评估"相关的查询转换有哪些? ♣答案部分 (一)逻辑转换 1LHR@orclasm > SELECT /*+FULL(A) F ...

  8. Oracle数据库表,数据量很少,但是查询很慢

    Oracle数据库表,数据量很少,但是查询很慢 1.起因 1.1.原因排查 1.2.原因分析 2.解决方式 2.1.删表重建这张表(95%解决一切问题) 2.2.建索引(目前用的) 1.起因 一开始是 ...

  9. php 中 sql 查询语句怎么写,sql查询语句有哪些

    sql查询语句:1.查看表结构[SQL>DESC emp]:2.查询所有列[SQL>SELECT * FROM emp]:3.查询指定列:4.查询指定行:5.使用算术表达式:6.使用逻辑操 ...

最新文章

  1. python快速编程入门课后题答案-python语言程序设计基础(嵩天)第四章课后习题部分答案...
  2. 利用 NGINX 最大化 Python 性能,第二部分:负载均衡和监控
  3. Eclipse——热键amp;Help
  4. 测试题的答案(技术博客)
  5. 红橙Darren视频笔记 view的绘制流程(上) onMeasure测量代码分析 基于API27
  6. 我的docker随笔36:定制jenkins镜像
  7. P2479 [SDOI2010]捉迷藏
  8. 2019,燃烧的中国开源年
  9. app下载获取邀请码php,PHP根据id生成邀请码
  10. 云计算发展趋势-华为HCIA云计算学习笔记六
  11. Microsoft Store转圈圈
  12. 如何恢复手动删除的微信聊天记录?2个简单高效方法推荐
  13. 1898: [Zjoi2005]Swamp 沼泽鳄鱼
  14. springboot项目搭建0050-整合通用mapper
  15. 异常检测——5月(task1)
  16. HTML怎么像是下划线、穿越文字的横线以及上划线
  17. 最短路径—— Til the Cows Come Home
  18. Z-score 与 Fisher-Z 的区别
  19. 数据仓库之【用户行为数仓】12:【dws层:数据汇总层】【appc层:数据应用层】需求5:操作系统活跃用户相关指标
  20. 【智能制造】浅谈中国工业4.0的发展方向

热门文章

  1. P1426 小鱼会有危险吗
  2. VoLTE 有什么好处
  3. 丁克是什么意思,丁克家庭是什么意思,丁克家庭为什么越来越多
  4. 扎的多音字组词有哪些
  5. 为什么家里电信宽带不能用路由器了?
  6. Even better, if you don’t want to answer and
  7. 区块链优秀github开源项目
  8. php 设为首页 收藏_如何在网站上添加“设为首页”“加入收藏”
  9. SQL Server查询存储–概述
  10. modify sql_在SQL Server中使用JSON_MODIFY()修改JSON数据