ORACLE选择递归查询

START WITH定义了数据行查询的初始起点;

CONNECT BY prior定义表中各行的关联方式;

如果connect by后的“prior”为默认,则只能查询符合条件的起始行,不进行递归查询;

条件二:col_1 = col_2,col_1是父键(标识父),col_2是子键(标识子)。

条件3在递归前过滤对应的节点及其子节点,如果上级节点不满足,则自动过滤掉下级节点;

条件4递归后过滤对应的节点或子节点,如果上级节点不满足,下级节点自动提升一级。

系统伪列:

CURRVAL和NEXTVAL对序列号使用保留字。

ROWID记录的唯一标识。

ROWNUM限制查询结果集的数量。

级别显示层次结构树中特定行的层次结构或级别。

CONNECT_BY_ROOT返回当前层的根节点(当前行数据对应的最高层节点的内容)。

SYS _ CONNECT _ BY _ PATH(& lt;column & gt,& ltchar & gt)函数实现会以“路径”或层次元素列表的形式显示从父节点到当前行的内容。

CONNECT_BY_ISCYCLE必须采用参数NOCYCLE。父节点的内容在当前行被引用,树中有一个循环。如果循环显示“1”,否则显示“0”。

CONNECT_BY_ISLEAF确定当前行是否是叶。如果一个叶子显示“1”,如果不是叶子而是分支(比如当前内容是其他行的父),则显示“0”。

在Oracle 10g中,只要指定“NOCYCLE”就可以执行任何查询操作。还有一个伪列与这个关键字相关——connect _ by _ is cycle。如果当前行引用了父节点的内容,并且树中有循环,则该行伪列显示“1”,否则显示“0”。

例子

-创建测试表,增加测试数据。

创建表测试(superid varchar2(20),id varchar2(20),MC varchar 2(20));

插入到测试值中(“0”,“1”,“a 1”);

插入到测试值中(“0”、“2”、“A2”);

插入测试值(' 1 ',' 11 ',' a 11 ');

插入到测试值中(“1”、“12”、“a 12”);

插入到测试值中(“2”,“21”,“a 21”);

插入到测试值中(“2”、“22”、“A22”);

插入测试值(' 11 ',' 111 ',' a 111 ');

插入测试值(' 11 ',' 112 ',' a 112 ');

插入测试值(' 12 ',' 121 ',' a 121 ');

插入到测试值中(“12”、“122”、“a 122”);

插入测试值(' 21 ',' 211 ',' a 211 ');

插入测试值(' 21 ',' 212 ',' a 212 ');

插入到测试值中(“22”,“221”,“a 221”);

插入到测试值中(“22”、“222”、“A222”);

提交;

-分层查询示例

Select level||' level' JC,lpad(',(level-1) * 4) || id id,MC。

来自测试

以superid = '0 '开始,通过prior id=superid连接;

Select level | | | ' level ' JC,connect _ by _ isleafmxf,lpad(',(level-1) * 4) || id id,MC。

来自测试

以superid = '0 '开始,通过prior id=superid连接;

-首先给出“数据库字符串分组加四”中的两个例子来理解...连接方式。...

-函数:按superid分组,并使用“;”confix

-实现:下面两个例子都是通过构造两个伪列来连接的。