文章中虽然给出了树的遍历方法,但是结果看上去不是很直观。通过这个小文儿给大家介绍一下层次查询中可用的一个伪列“LEVEL”,这个伪列可以显示出数据的层次级别。1.回忆一下这棵“树” A / \ B C / / D E / \F G如果以A作为根节点,那么,A就是LEVEL 1,第二行是LEVEL 2,第三行是LEVEL 3,以此类推……2.再回忆一下刻画这棵树的T表数据sec@ora10g> select * from t;X Y Z---------- ---------- ----------A 1B 2 1C 3 1D 4 2E 5 3F 6 4G 7 47 rows selected.3.直入主题,引入“LEVEL”伪列。直接可以得到每一条记录的层次级别。sec@ora10g> select x, y, z, level from t start with x = 'A' connect by prior y=z;X Y Z LEVEL---------- ---------- ---------- ----------A 1 1B 2 1 2D 4 2 3F 6 4 4G 7 4 4C 3 1 2E 5 3 37 rows selected.通过上面查询,可以很清楚地知道每条记录所处的级别,可以很直接地知到谁是您的直接Boss!找Boss的过程:从当前记录向上查找,找到的第一个比自己level值小的记录便是您的顶头上司。例如要得到E的顶头上司:E的level是3,向上查找到第一个比3小的记录是C(C的level是2),所以C是E的直接领导。例如要得到C的顶头上司:C的level是2,向上查找到第一个比2小的记录是A(A的level是1),所以A是C的直接领导。4.LEVEL伪列小应用其一,使用lpad函数辅助给出记录的层次关系。sec@ora10g> select x, y, z, level, lpad(x,level,'>') lpad from t start with x = 'A' connect by prior y=z;X Y Z LEVEL LPAD---------- ---------- ---------- ---------- ---------------------A 1 1 AB 2 1 2 >BD 4 2 3 >>DF 6 4 4 >>>FG 7 4 4 >>>GC 3 1 2 >CE 5 3 3 >>E7 rows selected.不用多说,七条记录的层次级别不言自明。5.LEVEL伪列小应用其二,得到连续递增的等差序列。sec@ora10g> select level, 2*level, 3*level from dual connect by level <= 10; LEVEL 2*LEVEL 3*LEVEL---------- ---------- ---------- 1 2 3 2 4 6 3 6 9 4 8 12 5 10 15 6 12 18 7 14 21 8 16 24 9 18 27 10 20 3010 rows selected.6.LEVEL伪列小应用其三,完成测试表数据的初始化。1)创建待初始化数据的测试表T_LEVELsec@ora10g> create table t_level (x number, y number);Table created.2)使用层次查询完成三条初始化数据的插入
sec@ora10g> insert into t_level select level, dbms_random.random from dual connect by level <= 3;3 rows created.sec@ora10g> commit;Commit complete.3)验证初始化的三条数据sec@ora10g> select * From t_level; X Y---------- ---------- 1 1229751406 2 -1.937E+09 3 1587740297.LEVEL伪列小应用其四,“乾坤大挪移”的另外一种实现方法。sec@ora10g> colsecoolerfor a8sec@ora10g> select substr ('secooler', rownum, 1) "secooler" from dual connect by rownum <= length('secooler');secooler--------secooler8 rows selected.“乾坤大挪移”初级实现请参见文章《【SQL】“乾坤大挪移”》http://space.itpub.net/519536/viewspace-6223098.小结本文通过几个有趣的例子给大家简单介绍了层次查询中的LEVEL伪列的用法,希望对大家有帮助。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26686207/viewspace-717048/
,如需转载,请注明出处,否则将追究法律责任。