oracle sql右连接,Oracle右连接

在本教程中,您将学习如何使用Oracle中的RIGHT OUTER JOIN来连接两个或多个表。

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值组合生成在结果集中。

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

1. Oracle RIGHT OUTER JOIN示例

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

6deda4768fc0428e9ab46f29db3dea37.png

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

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

d3408734d749dc5e77d423eb0d1a558c.png

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

如果销售员不负责任何销售订单(如Alice Wells,Charlotte Webb),则order_id和status列将填充NULL值。

2. Oracle RIGHT OUTER JOIN使用USING子句的示例

与其他连接(如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;

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

c84520c070366b95d333cef7d9d3aa8a.png

在此示例中,所有客户都包含在结果集中。 如果客户没有销售订单,则order_id和status列将填充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;

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

117e22dc5bdc056803017593b2d1d842.png

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

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

fca6eb2ed89267a1ec769e546b81c8e2.png

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

注意:有关INNER JOIN的注意事项是,条件放在ON子句中与放在WHERE子句中具有相同的效果。

在本教程中,您已经学习了如何使用Oracle中的RIGHT OUTER JOIN来查询多个表中的数据。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值