层次化查询
层次化查询
海贼爱音乐 发表于4个月前
层次化查询
  • 发表于 4个月前
  • 阅读 22
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: Hierarchical Query Pseudocolumns

层次化查询,即树型结构查询,是SQL中经常用到的功能之一,通常由根节点,父节点,子节点,叶节点组成。

SELECT [LEVEL] ,column,expression,...
FROM table_name
[WHERE where_clause]
[[START WITH start_condition] [CONNECT BY PRIOR prior_condition]];

CONNECT_BY_ISCYCLE:伪列,如果当前行有一个子行,且子行又是当前行的祖先行,CONNECT_BY_ISCYCLE返回1,否则返回0。只有在CONNECT BY从句中指定了NOCYCLE参数,才能指定CONNECT_BY_ISCYCLE。由于CONNECT BY存在循环数据,NOCYCLE能使Oracle返回查询结果,否则将查询失败。
CONNECT_BY_ISLEAF:伪列,如果当前行是CONNECT BY条件定义树的叶子节点,CONNECT_BY_ISLEAF伪列返回1,否则返回0。该信息也表明了一个给定的行是否可以进一步扩张,表现出更多的层次。
LEVEL:伪列,用于表示树的层次
start_condition:层次化查询的起始条件
prior_condition:定义父节点和子节点之间的关系,PRIOR指定父节点。作为运算符,PRIOR和加(+)减(-)运算的优先级相同。condition ... PRIOR expr = expr 或者 ... expr = PRIOR expr

例子使用Oracle的示例用户HR用户

SELECT EMPLOYEE_ID,FIRST_NAME,MANAGER_ID,DEPARTMENT_ID FROM EMPLOYEES;

图片说明

  1. 从根节点开始遍历
SELECT LEVEL,EMPLOYEE_ID,FIRST_NAME,MANAGER_ID,DEPARTMENT_ID FROM EMPLOYEES
START WITH EMPLOYEE_ID=100 CONNECT BY PRIOR EMPLOYEE_ID=MANAGER_ID;

输入图片说明
2. 从非根节点开始遍历

SELECT LEVEL,EMPLOYEE_ID,FIRST_NAME,MANAGER_ID,DEPARTMENT_ID FROM EMPLOYEES
START WITH FIRST_NAME='Lex' CONNECT BY PRIOR EMPLOYEE_ID=MANAGER_ID;

输入图片说明
3. 从下向上遍历树。交换父节点与子节点在CONNECT BY PRIOR子句中的顺序

SELECT LEVEL,EMPLOYEE_ID,FIRST_NAME,MANAGER_ID,DEPARTMENT_ID FROM EMPLOYEES
START WITH EMPLOYEE_ID=105 CONNECT BY PRIOR MANAGER_ID=EMPLOYEE_ID;

输入图片说明

标签: Oracle 数据库
共有 人打赏支持
粉丝 0
博文 71
码字总数 17509
×
海贼爱音乐
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: