数据库教程-Oracle自身连接

跨零代码为大家提供高品质的解决方案,请大家多多来访,跨零不胜感激,在此谢过。

在本教程中,您将学习如何使用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列匹配员工和经理。

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

Oracle自身连接

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自身连接

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

  

从零到一,创造未来!跨零综合IT问题解决服务站,欢迎你的到来。Oracle数据库教程 只为你绽放。

本文固定链接: http://kua0.com/2019/01/16/数据库教程-oracle自身连接/

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注