Oracle 11g Release 1 (11.1) SQL_层级查询(概)
2012-06-11 22:48
465 查看
本文内容
演示层级查询层级查询(Hierarchical Queries)
参考
演示层级查询
了解层级查询的意义在于,可以省去程序的递归代码。写递归总是很烦人。假设在 Oracle 的 scott 用户下,用 EMP 表演示层级查询。该表包含某个员工及其上级。全部内容如下:
职位最高的当然是主席 PRESIDENT;
然后是经理 MANAGER;
其次是分析师 ANALYST;
最后是营业员 CLEAK 和销售人员 SALESMAN。
示例 1:演示员工编号为 7566 的员工及其所有下属。然后是经理 MANAGER;
其次是分析师 ANALYST;
最后是营业员 CLEAK 和销售人员 SALESMAN。
[code] [code]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;
[/code]
[/code]
示例 2:演示员工编号为 7566 的所有下属。
[code] [code]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;
[/code]
[/code]
示例 3:演示员工编号为 7876 员工及其所有上级。
[code] [code]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;
[/code]
[/code]
从上面演示可以看出,层级查询既可以“向下”查询,也可以“向上”查询,类似“递归”。
示例 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 通常用在等值操作符来比较列的值。该关键字可以用在运算符的任何一边。
参考
Oracle 11g Release 1 (11.1) SQL_层级查询(详)相关文章推荐
- Oracle 11g Release 1 (11.1) SQL_层级查询(详)
- Oracle 11g Release 1 (11.1) PL/SQL_理解 Record 类型
- Oracle 11g Release 1 (11.1) PL/SQL_了解静态和动态 SQL
- Oracle 11g Release 1 (11.1) 游标——SQL 游标(隐式)
- Oracle 11g Release 1 (11.1) PL/SQL_了解静态和动态 SQL
- Oracle 11g Release 1 (11.1) 游标——在 PL/SQL 管理游标
- Oracle 11g Release 1 (11.1) PL/SQL_理解 Collection 类型
- Oracle 11g Release 1 (11.1) PL/SQL_了解 Collections 和 Records 类型
- Oracle 11g Release 1 (11.1)——聚簇和非聚簇的简单查询比较
- Oracle 11g Release 1 (11.1) PL/SQL Collection 方法
- Oracle 11g Release 1 (11.1) PL/SQL_多维 Collection 类型和其异常
- Oracle 11g Release 1 (11.1) 单行函数——NLS 字符函数
- Oracle 11g Release 1 (11.1) 游标——显式游标
- Oracle 11g Release 1 (11.1) Oracle Text——演示创建 Oracle Text 索引
- Oracle 11g Release (11.1) 索引底层的数据结构
- Oracle 11g Release 1 (11.1) Data Pump 导入模式
- Oracle 11g Release 1 (11.1) Oracle Text 如何创建 CONTEXT 索引
- Oracle 11g Release 1 (11.1) 表空间——创建和扩展永久表空间
- Oracle 11g Release 1 (11.1) 单行函数——(返回字符值)字符函数
- Oracle 11g Release 1 (11.1) 表空间——简单管理永久表空间