SQL左连接,右连接,全连接,内连接,交叉连接

连接分为内连接、外连接和交叉连接最常用莫过于内连接(INNER JOIN) 和 左外连接(LEFT JOIN 或 LEFT OUTER JOIN)。

 

内连接。(典型的连接运算,使用像 = 或 <> 之类的比较运算符)包括相等连接和自然连接。
INNER JOIN 或 JOIN
用法:A INNER JOIN B ON 关联条件,自然连接等价于:SELECT DISTINCT * FROM A JOIN B

 

外连接。外连接可以是左向外连接、右向外连接或完整外部连接。

LEFT JOIN 或 LEFT OUTER JOIN。
左向外连接的结果集包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。
用法:A LEFT JOIN B ON 关联条件

 

RIGHT JOIN 或 RIGHT OUTER JOIN。
右向外连接是左向外连接的反向连接。A RIGHT JOIN B  =  B LEFT JOIN A,是一样的。将返回右表的所有行。
也就是,LEFT JOIN 返回左表所行,RIGHT JOIN 返回右表所有行,简单好记。

 

FULL JOIN 或 FULL OUTER JOIN。
完整外部连接返回左表和右表中的所有行。有匹配的匹配,没有就留空(NULL)。
用法:A FULL JOIN B ON 关联条件


所有连接返回记录数都有可能比关联两表的记录数多,因为有匹配若是一对多的,关联后的记录数势必放大。内连接、左右连接是这样,全连接则肯定的。
除了内连接外,放大即会用NULL填充。故使用左连接、全连接时,常会产生很多意外的NULL。

 

交叉连接。交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉连接也称作笛卡尔积。
用法:A CROSS JOIN B (不要ON)

 

此外,自连接其实只是关联表 A和B 是同一张表的情况。如银行机构信息表,同一张表里有总行、分行和支行,通过自身关联,可看一个支行的上级机构信息。

猜你喜欢

转载自itsunmoon.iteye.com/blog/1748521