Oracle自身连接
精华
小牛编辑
127浏览
2023-03-14
在本教程中,您将学习如何使用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图如下所示 -
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
表的表别名。执行上面查询语句,得到以下结果 -
在本教程中,您学习了如何使用Oracle自连接来查询分层数据并比较同一个表中的行。