oracle数据库分层,Oracle数据库的分层查询(一)
我們知道關(guān)系數(shù)據(jù)庫不是以分層形式存儲(chǔ)數(shù)據(jù)的,那么我們又該如何以分層方法獲取數(shù)據(jù)呢?本文將為你介紹由Oracle提供的分層查詢特性,告訴你分層查詢的概念,并迎合你的需要構(gòu)建一個(gè)分層查詢。
使用分層查詢時(shí),你可以通過表的自然關(guān)系檢索記錄,它一定是一顆語系樹或雇員/經(jīng)理樹,以及其它可能的樹。如果關(guān)系位于同一個(gè)表中,遍歷樹可以讓你構(gòu)造一顆分層樹,例如:在emp表中的manager列定義了管理層。
我們以scott方案中的emp表為例,表中King是最高級(jí)別。
假設(shè)我們要查詢直接向King報(bào)告的雇員。
但如果我們還想遞歸地查詢直接向JONES,BLAKE和CLARK報(bào)告的人呢?
我們一起來看一下這個(gè)查詢語句中包括的關(guān)鍵字:
START WITH??? —?? 指定層次的根部行,換句話說就是從哪里開始解析,對(duì)于真正的層次查詢,這個(gè)子句是必需要有的。
CONNECT BY PRIOR?? —?? 解釋父子之間的關(guān)系。
PRIOR??? —?? 它用于實(shí)現(xiàn)遞歸條件(真正的遍歷)。
遍歷樹的方向
進(jìn)一步說明CONNECT BY子句,它決定你是從頂向下還是從底向上進(jìn)行遍歷。
CONNECT BY PRIOR col_1 = col_2
如果是從頂向下遍歷:
col_1是父鍵(它標(biāo)識(shí)父),col_2是子鍵(它標(biāo)識(shí)子)。
SELECT?empno,
ename,
job,
mgr,
hiredate,
level
FROM???emp
START?WITH?mgr?IS?NULL
CONNECT?BY?PRIOR?empno?=?mgr
查詢結(jié)果如下:
如果是從底向上遍歷:
col_1就是子鍵,col_2就是父鍵了。
CONNECT?BY?PRIOR?mgr?=?empno
我們一直都在努力堅(jiān)持原創(chuàng).......請(qǐng)不要一聲不吭,就悄悄拿走。
我原創(chuàng),你原創(chuàng),我們的內(nèi)容世界才會(huì)更加精彩!
【所有原創(chuàng)內(nèi)容版權(quán)均屬TechTarget,歡迎大家轉(zhuǎn)發(fā)分享。但未經(jīng)授權(quán),嚴(yán)禁任何媒體(平面媒體、網(wǎng)絡(luò)媒體、自媒體等)以及微信公眾號(hào)復(fù)制、轉(zhuǎn)載、摘編或以其他方式進(jìn)行使用。】
微信公眾號(hào)
TechTarget
官方微博
TechTarget中國
總結(jié)
以上是生活随笔為你收集整理的oracle数据库分层,Oracle数据库的分层查询(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php中有size_t函数吗,lSize
- 下一篇: oracle未找到远程连接,Oracle