左右連接其實就是以哪個表為主(或者說為准),結果集為“主表”的全部記錄+“副表”與“主表”相匹配的記錄,如果“副表”中沒有和“主表”相匹配的記錄,則相對應的記錄顯示為NULL
左連接:左邊表全部行+右邊表相匹配的行,如果左邊表中的某一行,在右邊表中沒有匹配的行,則顯示NULL(left join 或者left outer join)
右連接:和左連接相反。(right join 或者right outer join)
內連接:它返回字段ID(連接條件)同時存在於兩個表中的記錄,也就是說,僅當至少有一個同屬於兩表的行符合聯接條件時,內聯接才返回行,內聯接消除與另一個表中的任何行不匹配的行。(inner join或者join)
全連接:不管匹配不匹配,全部都顯示出來。(full join或者full outer join)
交叉連接:沒有WHERE 子句的交叉聯接將產生聯接所涉及的表的笛卡爾積。第一個表的行數乘以第二個表的行數等於笛卡爾積結果集的大小。(cross join不帶where)
自連接:給自己取個別名,一個表當兩個表來使用。
-------------------------------------
例子
Table A
aid adate
1 a1
2 a2
3 a3
TableB
bid bdate
1 b1
2 b2
4 b4
兩個表a,b相連接,要取出id相同的字段
select * from a inner join b on a.aid = b.bid這是僅取出匹配的數據.
此時的取出的是:
1 a1 b1
2 a2 b2
那么left join 指:
select * from a left join b on a.aid = b.bid
首先取出a表中所有數據,然后再加上與a,b匹配的的數據
此時的取出的是:
1 a1 b1
2 a2 b2
3 a3 空字符
同樣的也有right join
指的是首先取出b表中所有數據,然后再加上與a,b匹配的的數據
此時的取出的是:
1 a1 b1
2 a2 b2
4 空字符b4
LEFT JOIN 或LEFT OUTER JOIN。
左向外聯接的結果集包括LEFT OUTER 子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值。
SQL:JOIN之完全用法
外聯接可以是左向外聯接、右向外聯接或完整外部聯接。在FROM 子句中指定外聯接時,可以由下列幾組關鍵字中的一組指定:LEFT JOIN 或LEFT OUTER JOIN。
左向外聯接的結果集包括LEFT OUTER 子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值。
RIGHT JOIN 或RIGHT OUTER JOIN。
右向外聯接是左向外聯接的反向聯接。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將為左表返回空值。
FULL JOIN 或FULL OUTER JOIN。
完整外部聯接返回左表和右表中的所有行。當某行在另一個表中沒有匹配行時,則另一個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的數據值。
僅當至少有一個同屬於兩表的行符合聯接條件時,內聯接才返回行。內聯接消除與另一個表中的任何行不匹配的行。而外聯接會返回FROM 子句中提到的至少一個表或視圖的所有行,只要這些行符合任何WHERE 或HAVING 搜索條件。將檢索通過左向外聯接引用的左表的所有行,以及通過右向外聯接引用的右表的所有行。完整外部聯接中兩個表的所有行都將返回