分層查詢
分層查詢是一種查詢類型,它根據(jù)構(gòu)成父子關(guān)系的數(shù)據(jù)按層次順序返回結(jié)果集的行。
層次結(jié)構(gòu)通常由一個倒置的樹形結(jié)構(gòu)表示。該樹由相互連接的節(jié)點組成。每個節(jié)點可連接到一個或多個子節(jié)點,也可不連接到子節(jié)點。每個節(jié)點都連接到一個父節(jié)點,但沒有父級的頂級節(jié)點之外。此節(jié)點為根節(jié)點。每個樹都只有一個根節(jié)點。沒有任何子級的節(jié)點稱為葉節(jié)點。樹始終至少有一個葉節(jié)點;例如,最簡單的情況是樹由單個節(jié)點組成。在這種情況下,該節(jié)點既是根又是葉。
在分層查詢中,結(jié)果集的行表示一個或多個樹的節(jié)點。
單個給定行可能出現(xiàn)在多個樹中,因而在結(jié)果集中會出現(xiàn)多次。
查詢中的層次關(guān)系由CONNECTBY子句描述,該子句構(gòu)成了結(jié)果集中返回行的順序的基礎(chǔ)。下面顯示了CONNECT BY子句及其關(guān)聯(lián)的可選子句出現(xiàn)在SELECT命令中的上下文。
SELECT select_list FROM table_expression [ WHERE ...]
[ START WITH start_expression ]
CONNECT BY { PRIOR parent_expr = child_expr |
child_expr = PRIOR parent_expr }
[ ORDER SIBLINGS BY column1 [ ASC | DESC ]
[, column2 [ ASC | DESC ] ] ...
[ GROUP BY ...]
[ HAVING ...]
[ other ...]
select_list是一個或多個表達式,它構(gòu)成了結(jié)果集的字段。table_expression是一個或多個表或視圖,結(jié)果集的行源于這些表或視圖。other是任何其他合法的SELECT命令子句。與分層查詢相關(guān)的子句START WITH、CONNECT BY和ORDER SIBLINGS BY將在以下各節(jié)中予以介紹。
目前PolarDB PostgreSQL版(兼容Oracle)不支持在CONNECT BY子句中使用AND(或其他運算符)。