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

在本教程中,您将学习如何使用oracle cross join创建连接表的笛卡尔积。

oracle cross join子句简介

在数学中,给定两个集合aba x b的笛卡尔乘积是所有有序对(ab)的集合,属于ab属于b

要在oracle中创建表的笛卡尔乘积,可以使用cross join子句。 以下说明了cross join子句的语法:

select
    column_list
from
    t1 
cross join t2;

与其他连接(如inner joinleft join)不同,cross join没有连接谓词的on子句。

当执行两个没有关系的表的交叉连接时,将得到两个表的行和列的笛卡尔乘积。

当您想要生成大量的行进行测试时,交叉连接非常有用。假设我们有两个有mn行的表,这些表的笛卡尔乘积就有m × n行。

oracle cross join示例

请参阅示例数据库中的以下库存表 - inventories, 其表结构如下图所示 -

cross join示例

inventories表中的每一行都需要product_idwarehouse_idquantity的数据。

要生成用于插入inventories表的测试数据,可以使用cross join子句,如以下语句所示:

select
    product_id,
    warehouse_id,
    round( dbms_random.value( 10, 100 )) quantity
from
    products 
cross join warehouses;

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

cross join示例

在此示例中,交叉联接从products表和warehouses表中创建了product_idwarehouse_id的笛卡尔乘积。products表有288行和warehouses表有9行,因此这些表的交叉连接后返回2592行(288×9)记录。

请注意,我们使用dbms_random.value()函数来获得10100之间的一个随机数,而round()函数从随机数中获取整数值。

在本教程中,您学习了如何使用oracle cross join创建连接表的笛卡尔积。


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