數據庫之笛卡爾積


1.      什么是笛卡爾積

1.1       定義

笛卡爾積又叫笛卡爾乘積,是一個叫笛卡爾的人提出來的。
簡單的說就是兩個集合相乘的結果。
具體的定義去看看有關代數系的書的定義。
 直觀的說就是
 集合A{a1,a2,a3} 集合B{b1,b2}
 他們的 笛卡爾積 是 A*B ={(a1,b1),(a1,b2),(a2,b1),(a2,b2),(a3,b1),(a3,b2)}
 任意兩個元素結合在一起

 

笛卡爾(Descartes)乘積又叫直積。假設集合A={a,b},集合B={0,1,2},則兩個集合的笛卡爾積為{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。可以擴展到多個集合的情況。類似的例子有,如果A表示某學校學生的集合,B表示該學校所有課程的集合,則A與B的笛卡爾積表示所有可能的選課情況。

 

1.2   SQLL笛卡爾積示例

SELECT * FROM table1 , table2

2.      什么場景會產生笛卡爾積

笛卡爾積產生,有兩種情況:

  1. 表連接缺少關聯條件,這個是必須要改的;
  2. 表連接有關聯條件,但是oracle判斷用笛卡爾積更快,也會出現笛卡爾積,這個時候要看實際執行速度;oracle這樣判斷,一般是表比較小,這個時候要特別檢查表的數據量是不是真的很少,以免oracle因為統計信息錯誤而誤判。

 

3.      SQL笛卡爾積的危害

4.      如何避免SQL笛卡爾積

Left join ,  hint


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM