在本教學中,您將學習如何使用Oracle CROSS JOIN
建立連線表的笛卡爾積。
在數學中,給定兩個集合A
和B
,A x B
的笛卡爾乘積是所有有序對(a
,b
)的集合,屬於A
,b
屬於B
。
要在Oracle中建立表的笛卡爾乘積,可以使用CROSS JOIN
子句。 以下說明了CROSS JOIN
子句的語法:
SELECT
column_list
FROM
T1
CROSS JOIN T2;
與其他連線(如INNER JOIN
或LEFT JOIN
)不同,CROSS JOIN
沒有連線謂詞的ON
子句。
當執行兩個沒有關係的表的交叉連線時,將得到兩個表的行和列的笛卡爾乘積。
當您想要生成大量的行進行測試時,交叉連線非常有用。假設我們有兩個有m
和n
行的表,這些表的笛卡爾乘積就有m × n
行。
請參閱範例資料庫中的以下庫存表 - inventories
, 其表結構如下圖所示 -
inventories
表中的每一行都需要product_id
,warehouse_id
和quantity
的資料。
要生成用於插入inventories
表的測試資料,可以使用CROSS JOIN
子句,如以下語句所示:
SELECT
product_id,
warehouse_id,
ROUND( dbms_random.value( 10, 100 )) quantity
FROM
products
CROSS JOIN warehouses;
執行上面查詢語句,得到以下結果 -
在此範例中,交叉聯接從products
表和warehouses
表中建立了product_id
和warehouse_id
的笛卡爾乘積。products
表有288
行和warehouses
表有9
行,因此這些表的交叉連線後返回2592
行(288×9
)記錄。
請注意,我們使用
dbms_random.value()
函式來獲得10
到100
之間的一個亂數,而ROUND()函式從亂數中獲取整數值。
在本教學中,您學習了如何使用Oracle CROSS JOIN
建立連線表的笛卡爾積。