2012-07-31 71 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