JOIN ,LEFT JOIN ,ALL JOIN 等的區別和聯繫

left join(左聯接) 返回包括左表中的全部記錄和右表中聯結字段相等的記錄 
right join(右聯接) 返回包括右表中的全部記錄和左表中聯結字段相等的記錄
inner join(等值鏈接) 只返回兩個表中聯結字段相等的行
 
舉例以下: 
--------------------------------------------
表A記錄以下:
aID     aNum
1     a20050111
2     a20050112
3     a20050113
4     a20050114
5     a20050115
 
表B記錄以下:
bID     bName
1     2006032401
2     2006032402
3     2006032403
4     2006032404
8     2006032408
 
--------------------------------------------
1.left join
sql語句以下: 
select * from A
left join B 
on A.aID = B.bID
 
結果以下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
5     a20050115    NULL     NULL
 
(所影響的行數爲 5 行)
結果說明:
left join是以A表的記錄爲基礎的,A能夠當作左表,B能夠當作右表,left join是以左表爲準的.
換句話說,左表(A)的記錄將會所有表示出來,而右表(B)只會顯示符合搜索條件的記錄(例子中爲: A.aID = B.bID).
B表記錄不足的地方均爲NULL.
--------------------------------------------
2.right join
sql語句以下: 
select * from A
right join B 
on A.aID = B.bID
 
結果以下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
NULL     NULL     8     2006032408
 
(所影響的行數爲 5 行)
結果說明:
仔細觀察一下,就會發現,和left join的結果恰好相反,此次是以右表(B)爲基礎的,A表不足的地方用NULL填充.
--------------------------------------------
3.inner join
sql語句以下: 
select * from A
innerjoin B 
on A.aID = B.bID
 
結果以下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
 
結果說明:
很明顯,這裏只顯示出了 A.aID = B.bID的記錄.這說明inner join並不以誰爲基礎,它只顯示符合條件的記錄.
--------------------------------------------
注: 
LEFT JOIN操做用於在任何的 FROM 子句中,組合來源表的記錄。使用 LEFT JOIN 運算來建立一個左邊外部聯接。左邊外部聯接將包含了從第一個(左邊)開始的兩個表中的所有記錄,即便在第二個(右邊)表中並無相符值的記錄。
 
語法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2
 
說明:table1, table2參數用於指定要將記錄組合的表的名稱。
field1, field2參數指定被聯接的字段的名稱。且這些字段必須有相同的數據類型及包含相同類型的數據,但它們不須要有相同的名稱。
compopr參數指定關係比較運算符:"=", "<", ">", "<=", ">=" 或 "<>"。
若是在INNER JOIN操做中要聯接包含Memo 數據類型或 OLE Object 數據類型數據的字段,將會發生錯誤.

 

 

Select  a.*  From  inner  join  on  a.id=b.id
--這個就是a和b中都存在的id才會顯示出來
Select  a.*,b.*  From  left  outer  join  on  a.id=b.id
--若是是left 的話就是a的id若是在b中不存在,那麼能夠顯示 若是b的在a的中沒有就不顯示b的內容,他的內容都是null,Right outer JOin相反
Select  a.*,b.*  from  Full  Outer  Join  On  a.id=b.id
--想當與包含了left outer join 和 Right Outer Join 就是隻要a和b裏面存在的id都會出現 若是a的id沒有在b中則b的內容為null,反之相同

 

 

Join  表示兩個表都必須存在的
left join 表示以左邊的表爲基準,無論你右邊的表有沒有都顯示
right join和left join恰好相反
full outer join表示只要在兩個表中任何一個表中有的都顯示 html

 

inner join 內鏈接
left join  左鏈接  左邊的表爲主表,數據徹底存在(right join 右鏈接就是left join的主對象表換過來)
full join  至關於  left join + right join
cross join 笛卡爾集合 sql

 

inner join 內鏈接 
left join  左鏈接  左邊的表爲主表,數據徹底存在 
right join 右鏈接  右邊表爲主表,

full join  至關於  left join + right join  oracle

JOIN:內連
LEFT JOIN:左連(左邊的數據一值有) 優化

相關文章
相關標籤/搜索