昨天我设计了一个Oracle的表,表中有父子关系,比如hr用户下的employees表中的employee_id和manage_id这两个列就是父子关系,当开发人员在进行开发的时候向我抱怨说当需要一个查询一天记录所有的子记录的时候需要循环多次才能读出所有数据。其实在Oracle在很久之前就使用connect by来专门处理这样的父子查询,到Oracle 11g R2 connect by的功能还有增强。下面我通过Oracle hr用户下employees和department表来展示Oracle是怎么处理父子关系的。
先看看employees表和departments表的表结构:
employees表中employee_id和manager_id这两列就具备父子关系,我们先通过下面的语句查询员工的部门名称和manager的名称:
select e.employee_id,
e.first_name || ' ' || e.last_name emp_name,
e.department_id,