Oracle 专题
专题目录
您的位置:database > Oracle专题 > Oracle自身连接
Oracle自身连接
作者:--    发布时间:2019-11-20

在本教程中,您将学习如何使用oracle自身连接将表连接到自身。

oracle自连接简介

自连接是连接表与自身的连接。自连接对比较表中的行或查询分层数据非常有用。

自连接使用其他连接,如内连接左连接。 另外,它使用表别名在同一查询中为表提供不同的名称。

请注意,在不使用表别名的情况下,在查询中多次引用同一个表会导致错误。

以下说明了表t如何与自身连接:

select
    column_list
from
    t t1
inner join t t2 on
    join_predicate;

请注意,除了inner join之外,还可以在上面的语句中使用left join

oracle自连接示例

下面我们来看看在oracle中使用自连接的一些例子。

1. 查询分层数据示例

请参阅示例数据库中的以下employees表。其er图如下所示 -

oracle自身连接

employees表存储个人信息,如:编号,姓名,职务。 另外,它还有manager_id列,用于存储员工之间的上级(报告人)行记录。

该公司总裁谁不向任何人报告,所以他的manager_id列中是一个null值。 其他拥有经理的员工在manager_id列中有一个数字值,表示经理的id

要从employees表中检索员工和经理数据,请使用以下语句中所示的自连接:

select
    (e.first_name || '  ' || e.last_name) employee,
    e.job_title,
    (m.first_name || '  ' || m.last_name) manager    
from
    employees e
left join employees m on
    m.employee_id = e.manager_id
order by
    manager;

这个查询引用employees表两次:一个是e(对于员工),另一个是对m(对于经理)。 连接谓词使用employee_idmanager_id列匹配员工和经理。

执行上面查询语句,得到以下结果 -

自连接示例

2. 比较表中的行的示例

以下语句查找所有雇用日期相同(同一天入职)的员工:

select
  (e1.first_name || '  ' || e1.last_name) employee1,
  (e2.first_name || '  ' || e2.last_name) employee2,
  to_char(e1.hire_date, 'yyyy-mm-dd') as hire_date
from
    employees e1
inner join employees e2 on
    e1.employee_id <> e2.employee_id
    and e1.hire_date = e2.hire_date;

e1e2是同一个employees表的表别名。执行上面查询语句,得到以下结果 -

比较表中的行

在本教程中,您学习了如何使用oracle自连接来查询分层数据并比较同一个表中的行。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册