SQL表連接inner join、outer join和cross join區別

平時開發中使用的 left join 和 right join 其實是 left outer join 和 right outer join,另外 outer join 還包括 full join。
現有兩張表,Table A 是左邊的表。Table B 是右邊的表。其各有四條記錄,其中有兩條記錄name是相同的:

1. INNER JOIN 產生的結果是AB的交集

SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name

2. LEFT [OUTER] JOIN 產生的是表A的完全集,而B表中匹配的則有值,沒有匹配的則以null值取代。 

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name

3. Right [OUTER] JOIN 產生的是表B的完全集,而A表中匹配的則有值,沒有匹配的則以null值取代,和left join類似。

SELECT * FROM TableA RIGHT OUTER JOIN TableB ON TableA.name = TableB.name

4. FULL [OUTER] JOIN 產生的是A和B的並集。對於沒有匹配的記錄,則會以null做爲值。

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name

可以通過is NULL將沒有匹配的值找出來:

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.nameWHERE TableA.id IS null OR TableB.id IS null

5. CROSS JOIN 把表A和表B的數據進行一個N*M的組合,即笛卡爾積。如本例會產生4*4=16條記錄,在開發過程中我們肯定是要過濾數據,所以這種很少用。

SELECT * FROM TableA CROSS JOIB N Table 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章