oracle中的left函数,Oracle Left Join

oracle函数 的 Oracle Left Join

在本教程中,您将学习如何使用Oracle LEFT JOIN子句来查询多个表中的数据。

Oracle LEFT JOIN子句简介

以下语句说明连接两个表T1和T2时的LEFT JOIN子句的语法:

SELECT

column_list

FROM

T1

LEFT JOIN T2 ON

join_predicate;

在这个查询中,T1是左表,T2是右表。查询将T1表中的每一行与T2表中的行进行比较。如果T1和T2表中的一对行满足连接谓词,查询将组合两个表中行的列值,并将结果行记录包含在结果集中。

如果T1表中的行在T2表中没有找到匹配的行,则查询将会将子句中出现在T2表的每个列的值设置为NULL并与T1表的行记录组合作为结果集输出。

换句话说,左连接(Left join)返回左表中的所有行,并从右表中返回匹配的行。

Oracle LEFT JOIN示例

请参阅中的以下orders和employees表,其ER结构图如下所示 -

688bbabf6a6536b7d2395f62305ea74a.png

orders表存储销售订单标题数据。它的salesman_id列引用employees表中的employee_id列。

salesman_id列的值部分是无效的,这意味着并不是所有的订单都有负责订单的销售人员。

以下语句从orders表和employees表中检索所有订单和员工数据:

SELECT

order_id,

status,

first_name,

last_name

FROM

orders

LEFT JOIN employees ON employee_id = salesman_id

ORDER BY

order_date DESC;

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

0e803ec604abc86ad676faff98be2d65.png

如上图中,结果包括订单表中的所有行。 对于在employees表中没有匹配行的orders表中的行记录时,使用NULL值(红色线框内)。

Oracle LEFT JOIN 连接多个表

以下语句使用LEFT JOIN子句演示如何连接三个表:orders, employees 和 customers,如下查询语句 -

SELECT

order_id,

name AS customer_name,

status,

first_name,

last_name

FROM

orders

LEFT JOIN employees ON

employee_id = salesman_id

LEFT JOIN customers ON

customers.customer_id = orders.customer_id

ORDER BY

order_date DESC;

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

adaefa324d49837c07fb680d1d5a4678.png

Oracle LEFT与USING子句联接

USING子句指定在连接表时要测试哪个列的相等性。以下显示了如何在LEFT JOIN中使用USING子句的语法:

SELECT

column_list

FROM

T1

LEFT JOIN T2 USING(c1,c2,c3, ...);

在这个语句中,USING子句中列出的列必须在T1和T2表中有存在。

上面查询语句使用USING子句改写后等同于使用ON子句的语句,以下所示:

SELECT

column_list

FROM

t1

LEFT JOIN t2 ON

t1.c1 = t2.c1

AND t1.c2 = t2.c2

AND t1.c3 = t2.c3

AND ... ;

以下语句演示如何在LEFT JOIN中使用USING子句:

SELECT

name,

order_id,

status,

order_date

FROM

customers

LEFT JOIN orders

USING(customer_id)

ORDER BY

name;

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

e0f9cff299ff79b925ec8eecb3f679ae.png

上面语句检索所有客户及其订单。对于尚未下过任何订单的客户,SELECT子句使用NULL设置在orders表的列,即:order_id,status和order_date。

ON与WHERE子句中的条件

以下语句查询获得订单ID为58的订单和销售员数据。

SELECT

order_id,

status,

employee_id,

last_name

FROM

orders

LEFT JOIN employees ON

employee_id = salesman_id

WHERE

order_id = 58;

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

caa52c38918b7bb578d224f9bc3297ac.png

现在,如果将条件从子句移动到LEFT JOIN的ON子句:

SELECT

order_id,

status,

employee_id,

last_name

FROM

orders

LEFT JOIN employees ON

employee_id = salesman_id

AND order_id = 58;

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

b3232ba6c06a7940d40a83c7a3cd6d5c.png

在这种情况下,查询将返回所有订单,但只有订单58具有与其关联的销售员数据。

请注意,对于内连接,置于ON中的条件与置于WHERE子句中的条件相同。

在本教程中,您已学习如何使用Oracle LEFT JOIN子句从多个表中检索数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值