新聞中心
層次查詢(Hierarchical Query)是一種具有特殊功能的查詢語(yǔ)句,通過它能夠?qū)⒎謱訑?shù)據(jù)按照層次關(guān)系展示出來(lái)。分層數(shù)據(jù)是指關(guān)系表中的數(shù)據(jù)之間具有層次關(guān)系。這種關(guān)系在現(xiàn)實(shí)生活中十分常見,例如:

成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè),成都做網(wǎng)站公司-成都創(chuàng)新互聯(lián)公司已向上1000家企業(yè)提供了,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)絡(luò)營(yíng)銷等服務(wù)!設(shè)計(jì)與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗(yàn),合理的價(jià)格為您打造企業(yè)品質(zhì)網(wǎng)站。
組織架構(gòu)中組長(zhǎng)和組員之間的關(guān)系。
企業(yè)中上下級(jí)部門之間的關(guān)系。
Web 網(wǎng)頁(yè)中,頁(yè)面跳轉(zhuǎn)的關(guān)系。
語(yǔ)法
SELECT [level], column, expr... FROM table [WHERE condition] [ START WITH start_expression ]
CONNECT BY [NOCYCLE] { PRIOR child_expr = parent_expr | parent_expr = PRIOR child_expr }
[ ORDER SIBLINGS BY …] [ GROUP BY … ] [ HAVING … ] [ ORDER BY … ]參數(shù)
|
參數(shù) |
說(shuō)明 |
|---|---|
|
CONNECT_BY_ISLEAF |
當(dāng)前數(shù)據(jù)行是否是層次關(guān)系中的葉子節(jié)點(diǎn),是偽列,0表示不是,1表示是。 |
|
CONNECT_BY_ISCYCLE |
當(dāng)前數(shù)據(jù)行是否在循環(huán)中,是偽列,0表示不是,1表示是。 |
|
CONNECT_BY_ROOT運(yùn)算符 |
CONNECT_BY_ROOT是一元運(yùn)算符,表示參數(shù)中的列來(lái)自于層次查詢的根節(jié)點(diǎn),與一元的 + 和 - 具有相同的優(yōu)先級(jí)。 |
PRIOR 是一元運(yùn)算符,表示參數(shù)中的列來(lái)自于父行(Parent row),與一元的 + 和 - 具有相同的優(yōu)先級(jí)。 | |
執(zhí)行流程
使用和實(shí)現(xiàn)層次查詢最關(guān)鍵是要理解其執(zhí)行流程,層次查詢執(zhí)行流程:
執(zhí)行
FROM后面的SCAN或JOIN操作;根據(jù)
START WITH和CONNECT BY的內(nèi)容生成層次關(guān)系結(jié)果;按照常規(guī)查詢執(zhí)行流程執(zhí)行剩下的子句(例如
WHERE、GROUP、ORDER BY......)對(duì)于 2 中生成層次關(guān)系的流程可以理解為:根據(jù)
START WITH中的表達(dá)式得到根行(Root rows)。根據(jù)
CONNECT BY中的表達(dá)式 選擇每個(gè)根行(Root rows)的子行(Child rows)。將 2 中生成的子行(Child rows)作為新的根行(Root rows)進(jìn)一步生成子行(Child rows),周而復(fù)始直到?jīng)]有新行生成。
示例
展示層次查詢的使用,向表 emp中的 emp_id、position 和 mgr_id 列插入數(shù)據(jù)。執(zhí)行以下語(yǔ)句:
CREATE TABLE emp(emp_id INT,position VARCHAR(50),mgr_id INT);
INSERT INTO emp VALUES (1,'全球經(jīng)理',NULL);
INSERT INTO emp VALUES (2,'歐洲區(qū)經(jīng)理',1);
INSERT INTO emp VALUES (3,'亞太區(qū)經(jīng)理',1);
INSERT INTO emp VALUES (4,'美洲區(qū)經(jīng)理',1);
INSERT INTO emp VALUES (5,'意大利區(qū)經(jīng)理',2);
INSERT INTO emp VALUES (6,'法國(guó)區(qū)經(jīng)理',2);
INSERT INTO emp VALUES (7,'中國(guó)區(qū)經(jīng)理',3);
INSERT INTO emp VALUES (8,'韓國(guó)區(qū)經(jīng)理',3);
INSERT INTO emp VALUES (9,'日本區(qū)經(jīng)理',3);
INSERT INTO emp VALUES (10,'美國(guó)區(qū)經(jīng)理',4);
INSERT INTO emp VALUES (11,'加拿大區(qū)經(jīng)理',4);
INSERT INTO emp VALUES (12,'北京區(qū)經(jīng)理',7);通過上面的內(nèi)容可以看見列 position 具有清晰的層次關(guān)系。樹狀結(jié)構(gòu)如下:
是按照層次結(jié)構(gòu)將結(jié)果展示出來(lái),執(zhí)行以下語(yǔ)句:
SELECT emp_id, mgr_id, position, level FROM emp
START WITH mgr_id IS NULL CONNECT BY PRIOR emp_id = mgr_id;查詢結(jié)果如下:
+--------+--------+-------------------+-------+
| EMP_ID | MGR_ID | POSITION | LEVEL |
+--------+--------+-------------------+-------+
| 1 | NULL| 全球經(jīng)理 | 1 |
| 2 | 1 | 歐洲區(qū)經(jīng)理 | 2 |
| 5 | 2 | 意大利區(qū)經(jīng)理 | 3 |
| 6 | 2 | 法國(guó)區(qū)經(jīng)理 | 3 |
| 3 | 1 | 亞太區(qū)經(jīng)理 | 2 |
| 7 | 3 | 中國(guó)區(qū)經(jīng)理 | 3 |
| 12 | 7 | 北京區(qū)經(jīng)理 | 4 |
| 8 | 3 | 韓國(guó)區(qū)經(jīng)理 | 3 |
| 9 | 3 | 日本區(qū)經(jīng)理 | 3 |
| 4 | 1 | 美洲區(qū)經(jīng)理 | 2 |
| 10 | 4 | 美國(guó)區(qū)經(jīng)理 | 3 |
| 11 | 4 | 加拿大區(qū)經(jīng)理 | 3 |
+--------+--------+-------------------+-------+如果僅查詢“亞太區(qū)”的層次結(jié)構(gòu),執(zhí)行以下語(yǔ)句:
SELECT emp_id, mgr_id, position, level FROM emp START WITH position = '亞太區(qū)經(jīng)理' CONNECT BY PRIOR emp_id = mgr_id;查詢結(jié)果如下:
+--------+--------+----------------+-------+
| EMP_ID | MGR_ID | POSITION | LEVEL |
+--------+--------+----------------+-------+
| 3 | 1 | 亞太區(qū)經(jīng)理 | 1 |
| 7 | 3 | 中國(guó)區(qū)經(jīng)理 | 2 |
| 12 | 7 | 北京區(qū)經(jīng)理 | 3 |
| 8 | 3 | 韓國(guó)區(qū)經(jīng)理 | 2 |
| 9 | 3 | 日本區(qū)經(jīng)理 | 2 |
+--------+--------+----------------+-------+ 當(dāng)前名稱:創(chuàng)新互聯(lián)OceanBase教程:OceanBase 層次查詢
地址分享:http://www.fisionsoft.com.cn/article/ccocjcc.html


咨詢
建站咨詢
