最近在學習MYSQL JOIN語句的執行順序和原理時,提到了笛卡爾積的概念,於是就想着了解一下笛卡爾積的概念和運用並進行記錄,方便以后復習。
定義:
笛卡爾乘積是指在數學中,兩個集合X和Y的笛卡爾積(Cartesian product),又稱直積,表示為X × Y,第一個對象是X的成員而第二個對象是Y的所有可能有序對的其中一個成員。
假設集合A={a, b},集合B={0, 1, 2},則兩個集合的笛卡爾積為{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

R有三個屬性ABC,每個屬性內有三個元素,如圖中R方框所示.
S有三個屬性ABC,每個屬性內有三個元素,如圖中S方框所示.
R乘以S是這樣計算的:
(每一行元素稱為一個元組)
Ra Rb Rc Sa Sb Sc分別代表R中的abc屬性,S中的abc三個屬性.
先用R中的第一個元組分別和S中的三個元組相乘,得到如下
Ra Rb Rc Sa Sb Sc
a1 b1 c1 a1 b2 c2
a1 b1 c1 a1 b3 c3
a1 b1 c1 a2 b2 c1
再用R中的第二個元組分別和S中的三個元組相乘,得到如下
Ra Rb Rc Sa Sb Sc
a1 b2 c2 a1 b2 c2
a1 b2 c2 a1 b3 c3
a1 b2 c2 a2 b2 c1
再用R中的第三個元組分別和S中的三個元組相乘,得到如下
Ra Rb Rc Sa Sb Sc
a2 b2 c1 a1 b2 c2
a2 b2 c1 a1 b3 c3
a2 b2 c1 a2 b2 c1
最后將這三種計算出來的陣列按照Ra Rb Rc Sa Sb Sc排列好,就能得到上面右邊方框中R乘以S得到的廣義笛卡爾積了.
參考文檔:
https://www.bilibili.com/read/cv5013688/
https://baike.baidu.com/item/%E7%AC%9B%E5%8D%A1%E5%B0%94%E4%B9%98%E7%A7%AF/6323173?fr=aladdin