博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle 11g Release 1 (11.1) SQL_层级查询(概)
阅读量:5122 次
发布时间:2019-06-13

本文共 1445 字,大约阅读时间需要 4 分钟。

本文内容

  • 演示层级查询
  • 层级查询(Hierarchical Queries)
  • 参考

 

演示层级查询

了解层级查询的意义在于,可以省去程序的递归代码。写递归总是很烦人。

假设在 Oracle 的 scott 用户下,用 EMP 表演示层级查询。该表包含某个员工及其上级。全部内容如下:

职位最高的当然是主席 PRESIDENT

然后是经理 MANAGER

其次是分析师 ANALYST

最后是营业员 CLEAK 和销售人员 SALESMAN

示例 1:演示员工编号为 7566 的员工及其所有下属。

select t.empno as 员工编号,
t.ename as 员工姓名,
t.job as 职位,
t.mgr as 上级编号,
level
from emp t
start with t.empno = 7566
connect by prior t.empno = t.mgr;

示例 2:演示员工编号为 7566 的所有下属。

select t.empno as 员工编号,
t.ename as 员工姓名,
t.job   as 职位,
t.mgr   as 上级编号
from emp t
start with t.mgr = 7566
connect by prior t.empno = t.mgr;

示例 3:演示员工编号为 7876 员工及其所有上级。

select t.empno as 员工编号,
t.ename as 员工姓名,
t.job   as 职位,
t.mgr   as 上级编号
from emp t
start with t.empno = 7876
connect by prior t.mgr = t.empno;

从上面演示可以看出,层级查询既可以“向下”查询,也可以“向上”查询,类似“递归”。

  • 示例 1 所示,“向下找”,则

start with t.empno = 7566 指定根节点;而 connect by prior t.empno = t.mgr 指定节点的关系,上级编号等于当前的员工编号。

  • 示例 3 所示,“向上找”,则

start with t.empno = 7876 指定根节点;而 connect by prior t.mgr = t.empno 指定节点的关系。员工编号等于当前员工的上级编号。

其实,connect by prior 表面“递归”的方向。如下图所示。

  • 若“向上找”,如节点 7 开始,则从节点 7 开始,所有父节点为 7 的节点,递归;
  • 若“向下找”,如节点 11 开始,则从节点 11 开始,所有节点为 11 的父节点,递归。

 

层级查询

以上仅仅是层级查询比较简单的应用。若一个表包含层级数据,则可以使用层级查询子句,以层级顺序来获得数据行。如下图所示层级查询子句的语法。

hierarchical_query_clause::=

START WITH 指定层级的根行(顶级数据行)。

CONNECT BY 指定父数据行与子数据行的层级关系。

PRIOR 是一个二元运算符,与 + 和 - 数学运算符的优先级相同。它计算层级查询中当前行的紧随父行的表达式。PRIOR 通常用在等值操作符来比较列的值。该关键字可以用在运算符的任何一边。

 

参考

o_%E5%8E%9F%E5%88%9B.jpg

o_r_%E7%BF%BB%E8%AF%91.jpg

转载于:https://www.cnblogs.com/liuning8023/archive/2012/06/11/2545655.html

你可能感兴趣的文章
移动开发平台-应用之星app制作教程
查看>>
leetcode 459. 重复的子字符串(Repeated Substring Pattern)
查看>>
伪类与超链接
查看>>
centos 7 redis-4.0.11 主从
查看>>
永远的动漫,梦想在,就有远方
查看>>
springboot No Identifier specified for entity的解决办法
查看>>
"远程桌面连接--“发生身份验证错误。要求的函数不受支持
查看>>
【BZOJ1565】 植物大战僵尸
查看>>
浅谈 unix, linux, ios, android 区别和联系
查看>>
51nod 1428 活动安排问题 (贪心+优先队列)
查看>>
中国烧鹅系列:利用烧鹅自动执行SD卡上的自定义程序(含视频)
查看>>
Solaris11修改主机名
查看>>
latex for wordpress(一)
查看>>
如何在maven工程中加载oracle驱动
查看>>
Flask 系列之 SQLAlchemy
查看>>
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
python常用函数
查看>>
FastDFS使用
查看>>