左外连接和左连接是否相同?

时间:2013-03-15 05:56:15

标签: mysql sql

我见过名为LEFT OUTER JOIN或RIGHT OUTER JOIN的连接。在某些地方,我见过LEFT JOIN或RIGHT JOIN。我很困惑。

我在2天前发布了question ,但我无法理解解决方案提供的链接。

这些类型的连接是否相同,或两者之间是否存在某些差异?

5 个答案:

答案 0 :(得分:60)

两者之间没有区别。 请参阅visual represenation of joins

答案 1 :(得分:21)

他们引用的第一个链接为您提供:

INNER JOIN:当两个表中都匹配时返回行。

LEFT JOIN / LEFT OUTER JOIN:返回左表中的所有行,即使右表中没有匹配项。

RIGHT JOIN / RIGHT OUTER JOIN:返回右表中的所有行,即使左表中没有匹配项也是如此。

FULL JOIN / FULL OUTER JOIN / OUTER JOIN:当其中一个表中存在匹配时返回行。

SELF JOIN:用于将表连接到自身,就像表是两个表一样,在SQL语句中暂时重命名至少一个表。

CARTESIAN JOIN:返回两个或多个连接表中记录集的笛卡尔积。

self join实际上不是special join。它只是反映了你可以自己加入一个表的事实。这样做你必须使用别名来解决它在同一个语句中出现多次的事实。

cartesian join可以被视为inner join,没有限制条件。或者,您可以将inner join视为具有附加限制的cartesian join(加入条件)。

答案 2 :(得分:3)

在MySQL语法中,LEFT OUTER JOINLEFT JOIN完全相同:(来自http://dev.mysql.com/doc/refman/5.0/en/join.html

| table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition
| table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor

请注意,OUTER关键字对于LEFT / RIGHT JOIN是可选的。

LEFT和RIGHT连接都是外连接。我相信有一些SQL可能需要OUTER关键字,但MySQL没有。也就是说有时LEFT JOIN可能无效。

答案 3 :(得分:3)

如果您查看JOIN的手册页,您会看到以下几行:

join_table:

   table_reference [INNER | CROSS] JOIN table_factor [join_condition]

   | table_reference STRAIGHT_JOIN table_factor

   | table_reference STRAIGHT_JOIN table_factor ON conditional_expr

| table_reference {LEFT | RIGHT} [OUTER] JOIN table_reference join_condition

   | table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor

粗线清楚地表明关键字OUTER是可选的。

答案 4 :(得分:1)

我在SQL Server中工作,根据我的使用和经验,LEFT JOINLEFT OUTER JOIN之间完全没有区别。 RIGHT JOINRIGHT OUTER JOIN也是如此。在SQL Server中使用LEFT JOIN关键字时,它仅表示LEFT OUTER JOIN。 所以根据我的观点,它的通用规则对于所有数据库引擎都是一样的。

see herehere