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

在本教程中,您将学习oracle inner join子句,用来从表中检索在其他表的匹配行的行。

oracle inner join语法简介

在关系数据库中,数据分布在许多相关的表中。例如,在样本数据库中,销售订单数据主要存储在ordersorder_items表中。参考以下er图结构 -

orders表存储订单的标题信息,order_items表存储订单购买货物的明细。

订单(orders)表通过order_id列链接到order_items表。这意味着对于orders表中的每一行,我们都可以在order_items表中,通过order_id列中找到具有相同值的一个或多个行数据。

要从两个或多个相关表中查询数据,请使用inner join子句。 以下语句说明如何连接两个表t1t2

select
  *
from
  t1
inner join t2 on join_predicate;

下面让我们仔细地来看看上面的语句:

  • 首先,在这种情况下,在from子句之后的t1是指定的主表。
  • 其次,在inner join子句中指定条件join_predicate。上面语句中的连接表是t2
  • 第三,连接谓词指定了连接表的条件。只有满足连接谓词的行记录才会包含在结果集中。

查询通过基于连接谓词组合表t1t2的列值来返回结果集。它将表t1的每一行与表t2的行进行比较,以查找满足连接谓词的所有行记录。只要通过匹配非null值来满足连接谓词,则t1t2表的每对匹配行的列值就会被合并到结果集中的一行中。

1. oracle inner join示例

以下查询使用inner join子句从orders表和order_items表中检索数据:

select
    *
from
    orders
inner join order_items on
    order_items.order_id = orders.order_id
order by
    order_date desc;

在这个例子中,连接谓词(条件)是 -

order_items.order_id = orders.order_id

查询将orders表中的每一行与order_items表中的行进行比较。当两个表中的行在order_id列中具有相同的值时,查询将两个表的行中的列值合并到结果行中,并将其包含在结果集中。

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

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

on子句外,还可以使用using子句指定在连接表时要测试哪些列的相等性。

下面用using子句说明inner join的语法。

select
  *
from
  t1
inner join t2 on( c1, c2, ... );

请注意,using子句中列出的列(如c1c2)必须在t1t2表中都存在(可用)。

以下示例使用inner joinusing子句从orders表和order_items表中检索数据:

select
  *
from
  orders
inner join order_items using( order_id )
order by
  order_date desc;

执行上面示例代码,得到以下结果 -

3. inner join多表连接示例

内部联接子句可以联接两个以上的表。 在实践中,应该限制连接表的数量来提高性能。 以下语句显示如何连接三个表:

以下语句显示如何连接三个表:ordersorder_itemscustomers, 为了保证查询语句的效率,超过三个表连接慎用。

select
    name,
    order_id,
    order_date,
    item_id,
    product_id,
    quantity,
    unit_price
from
    orders
inner join order_items
    using(order_id)
inner join customers
    using(customer_id)
order by
    order_date desc,
    order_id desc,
    item_id asc;

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

以下示例说明如何连接四个表:ordersorder_itemscustomersproducts。参考以下查询语句 -

select
  name as customer_name,
  order_id,
  order_date,
  item_id,
  product_name,
  quantity,
  unit_price
from
  orders
inner join order_items
  using(order_id)
inner join customers
  using(customer_id)
inner join products
  using(product_id)
order by
  order_date desc,
  order_id desc,
  item_id asc;

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

在本教程中,您已学习如何使用oracle内部联接从表中检索具有其他表的匹配行的数据记录。


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