在本教程中,您将学习如何使用oracle中的right outer join
来连接两个或多个表。
假设有两个表t1
和t2
,以下语句显示了如何使用oracle中的right outer join
子句连接这两个表:
select
column_list
from
t1
right outer join t2 on
join_predicate;
在这个语句中,t1
和t2
分别是左表和右表。
outer
关键字是可选的,因此right outer join
和right join
效果是相同的。
下面是right outer join
的工作原理。
t1
表中的每行都与t2
表中的行进行比较:
t2
表中的一行与t1
表中的任何一行不匹配,则t2
表中的行的列值将与t1
表中的每行的每一列使用null
值组合生成在结果集中。换句话说,右外连接返回右表中的所有行,以及左表中的匹配行。
我们将使用示例数据库中的orders
和employees
表进行演示:
在该er图中,销售员负责一个或多个销售订单。 但是,一些销售订单可能不由任何销售人员负责。
以下示例检索所有销售员及其销售订单(如果有):
select
first_name,
last_name,
order_id,
status
from
orders
right join employees on
employee_id = salesman_id
where
job_title = 'sales representative'
order by
first_name,
last_name;
执行上面查询语句,得到以下结果 -
结果包括职位名称为sales representative
的所有员工及其订单。
如果销售员不负责任何销售订单(如alice wells
,charlotte webb
),则order_id
和status
列将填充null
值。
与其他连接(如inner join,left join)类似,可以使用using
子句指定在连接表时要测试哪个列的相等性。
下面说明right outer join
使用using
子句的语法:
select
column_list
from
t1
right outer join t2 using(c1,c2,c3);
在此查询中,using
子句中列出的列必须出现在t1
和t2
表中。
以下声明等同于上面的语句:
select
column_list
from
t1
right outer join t2 on
t1.c1 = t2.c1
and t1.c2 = t2.c2
and t1.c3 = t2.c3;
以下语句演示如何使用using
子句中的right outer join
:
select
name,
order_id,
status
from
orders
right join customers
using(customer_id)
order by
name;
执行上面查询语句,得到以下结果 -
在此示例中,所有客户都包含在结果集中。 如果客户没有销售订单,则order_id
和status
列将填充null
值。
以下语句获取销售员id为57
的员工和订单数据。
select
employee_id,
last_name,
first_name,
order_id,
status
from
orders
right join employees on
employee_id = salesman_id
where
employee_id = 57;
执行上面示查询语句,得到以下结果 -
以下语句将条件放在where
子句中而不是on
子句中:
select
employee_id,
last_name,
first_name,
order_id,
status
from
orders
right join employees on
employee_id = salesman_id
and employee_id = 57;
执行上面示查询语句,得到以下结果 -
查询返回所有员工,但只有员工id为57
有相关的订单数据。
注意:有关inner join的注意事项是,条件放在
on
子句中与放在where
子句中具有相同的效果。
在本教程中,您已经学习了如何使用oracle中的right outer join
来查询多个表中的数据。