2012-07-31 67 views
16

我已經看到一個查詢使用LEFT JOIN而不是INNERLEFT OUTER什麼是PostgreSQL中的左連接

什麼是LEFT JOIN

+2

更多圖形說明:[Visual-Representation of SQL-Joins](http://www.codeproject.com/Articles/33052/Visual SQL連接的代表 – doctore 2012-08-02 11:12:50

+0

所有JOIN類型的PostgreSQL都在[手冊]中解釋(http://www.postgresql.org/docs/current/interactive/queries-table-expressions.html#QUERIES-JOIN )包括例子。所以基本上'OUTER'關鍵字對於'LEFT','RIGHT'和'FULL'連接是可選的。 – 2012-07-31 11:55:47

回答

33

如果inner join只返回兩個表中匹配的條目,則left join將獲取第一個表中的所有條目以及第二個表中任何匹配的條目。甲right join是的逆一個left join(即:所有與第二個表)

因此,如果表A是

A B 
1 a 
2 b 
3 c 

和表B是

A B 
1 d 
2 e 

然後Select * from TableA inner join TableB on TableA.A = TableB.A返回

1 a 1 d 
2 b 2 e 

And Select * from TableA left join TableB on TableA.A = TableB.A returns

1 a 1 d 
2 b 2 e 
3 c null null 
+1

我認爲結果不對。第一個查詢應該給1 a 1 d/2b 2 e第二個查詢應該給出:1 a 1 d/2b 2 e/3 c NULL NULL。 – 2012-07-31 12:14:51

+0

@RolandBouman是的,他們應該:) – podiluska 2012-07-31 12:16:04

8

這是一樣的LEFT OUTER(外被暗示,因爲INNER JOIN需要雙邊匹配所以LEFT INNER JOIN將毫無意義)。這同樣適用於RIGHT JOINFULL JOIN這些相當於分別相當於RIGHT OUTER JOINFULL OUTER JOIN