1. 程式人生 > >sql joins

sql joins

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