- Oracle数据库是什么?
- Oracle 11g安装教程
- Oracle 12C安装
- Oracle数据库和实例
- 连接到Oracle数据库
- Oracle示例数据库
- 导入Oracle示例数据库
- Oracle基础入门
- Oracle数据定义
- Oracle数据类型
- Oracle修改数据
- Oracle查询数据
- Oracle连接表
- Oracle操作符
- Oracle约束
- Oracle高级部分
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图如下所示 -
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自连接来查询分层数据并比较同一个表中的行。
上一篇:Oracle笛卡尔连接
下一篇:Oracle All运算符
扫描二维码
程序员编程王