子查询中的CONNECT BY如何工作

时间:2014-02-26 04:51:52

标签: oracle

我的查询如下

select substr( 'ORACLE DEVELOPER',level,1 ) ITEM
from dual connect by level <= length('ORACLE DEVELOPER') ;

它返回'O'作为结果。

但是如果我把它作为子查询放在其他地方则显示所需的输出。 查询如下。

select a.ITEM from (select substr( 'ORACLE DEVELOPER',level,1 ) ITEM
from dual connect by level <= length('ORACLE DEVELOPER') ) a

此CONNECT BY如何在子查询中工作。 我是这个功能的新手。谁能解释一下这个??

1 个答案:

答案 0 :(得分:2)

CONNECT BY是用于执行分层查询的Oracle SQL语法。一些很好的例子是here

其中一个副作用是它允许您多次查询单个数据源,这意味着有一个方便的技巧来生成任意数量的行:

SELECT 1
FROM dual
CONNECT BY LEVEL <= 10;

上面将双重连接到自身10次 - LEVEL伪列来自层次结构;因为CONNECT BY子句实际上并不引用rowsource中的任何数据,所以它实际上使双子自己的子孙,孙子等等,直到CONNECT BY子句的计算结果为false(在这种情况下,当LEVEL变大时)比10)。

在你的情况下,你为字符串的每个字母生成一行(而不是10,你指的是LENGTH('一个字符串'),这是获取查询为每个字母返回一个记录的好方法字符串中的字母。然后你使用SUBSTR从字符串中挑出第n个字母。