当前位置:首页 > SCHOOL > Oracle字典 > 正文内容

Oracle自连接

admin3年前 (2022-03-25)Oracle字典2500

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

Oracle自连接简介

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

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

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

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

SELECT
    column_list
FROM
    T t1
INNER JOIN T t2 ON
    join_predicate;

请注意,除了INNER JOIN之外,还可以在上面的语句中使用。

Oracle自连接示例

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

1. 查询分层数据示例

请参阅中的以下employees表。其ER图如下所示 -

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_id和manager_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;

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

 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。
标签: 连接表

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。