sql joins
阿新 • • 發佈:2018-03-01
ros 最終 gpo oss 滿足 它的 body 3.3 匹配
1 join的本質都是在計算兩個表的笛卡爾乘積
就是A中的每一行和B中的每一行構成新的表中的一行。其它的join都是在這個表的基礎上執行相應的操作。
inner join、full outer join、cross join在不加條件的時候,返回的是兩個表的笛卡爾積。
2 inner join
在兩個集合的笛卡爾積中選出滿足條件的行出來。
where是隱式連接,inner join是顯式連接,二者沒有本質的區別。
3 outer join
3.1 full outer join
mysql不支持full join
首先,從笛卡爾積集合中選擇出滿足條件的行,然後列出兩個集合中沒有匹配上的行,對於沒有匹配上的行,另外一個表中相應的列設置為NULL,也就是說,最終生成的表中包含了原來的表中的所有的行,只不過除了滿足條件的笛卡爾積行外,還有沒有匹配上的加了NULL的行。
3.2 left outer join
首先從笛卡爾積集合中選擇出滿足條件的行,然後列出前面一個表中沒有被選出的所有的行,對應的列都設置為NULL。這樣,最終生成的表中除了包含滿足條件的笛卡爾積中的行,還包含了原來前面的表中的所有的行。
3.3 right outer join
首先從笛卡爾積集合中選擇出滿足條件的行,然後列出後面一個表中沒有被選出的所有的行,對應的列都設置為NULL。這樣,最終生成的表中除了包含滿足條件的笛卡爾積中的行,還包含了原來後面的表中的所有的行。
4 cross join
兩個集合的笛卡爾積,也可以加on,結果和inner join一樣,但是cross join是先計算笛卡爾積,然後再根據條件選,更費時,並且耗內存,inner join直接選擇,更優。
sql joins