Oracle笛卡爾連接

在本教學中,您將學習如何使用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創建連接表的笛卡爾積。


上一篇: Oracle右連接 下一篇: Oracle自身連接