Oracle 专题
专题目录
您的位置:database > Oracle专题 > Oracle右连接
Oracle右连接
作者:--    发布时间:2019-11-20

在本教程中,您将学习如何使用oracle中的right outer join来连接两个或多个表。

oracle right outer join概述

假设有两个表t1t2,以下语句显示了如何使用oracle中的right outer join子句连接这两个表:

select
    column_list
from
    t1
right outer join t2 on
    join_predicate;

在这个语句中,t1t2分别是左表和右表。

outer关键字是可选的,因此right outer joinright join效果是相同的。

下面是right outer join的工作原理。

t1表中的每行都与t2表中的行进行比较:

  • 如果一对行满足连接谓词,则将两行的列值合并,以生成结果行,然后将其包含在结果集中。
  • 如果t2表中的一行与t1表中的任何一行不匹配,则t2表中的行的列值将与t1表中的每行的每一列使用null值组合生成在结果集中。

换句话说,右外连接返回右表中的所有行,以及左表中的匹配行。

1. oracle right outer join示例

我们将使用示例数据库中的ordersemployees表进行演示:

right outer join示例

在该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;

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

oracle右连接

结果包括职位名称为sales representative的所有员工及其订单。

如果销售员不负责任何销售订单(如alice wellscharlotte webb),则order_idstatus列将填充null值。

2. oracle right outer join使用using子句的示例

与其他连接(如inner joinleft join)类似,可以使用using子句指定在连接表时要测试哪个列的相等性。

下面说明right outer join使用using子句的语法:

select
    column_list
from
    t1
right outer join t2 using(c1,c2,c3);

在此查询中,using子句中列出的列必须出现在t1t2表中。

以下声明等同于上面的语句:

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;

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

oracle右连接

在此示例中,所有客户都包含在结果集中。 如果客户没有销售订单,则order_idstatus列将填充null值。

3. oracle right join:条件在on与where子句中

以下语句获取销售员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;

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

oracle右连接

以下语句将条件放在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;

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

oracle右连接

查询返回所有员工,但只有员工id为57有相关的订单数据。

注意:有关inner join的注意事项是,条件放在on子句中与放在where子句中具有相同的效果。

在本教程中,您已经学习了如何使用oracle中的right outer join来查询多个表中的数据。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册