我见过名为LEFT OUTER JOIN或RIGHT OUTER JOIN的连接。在某些地方,我见过LEFT JOIN或RIGHT JOIN。我很困惑。
我在2天前发布了question ,但我无法理解解决方案提供的链接。
这些类型的连接是否相同,或两者之间是否存在某些差异?
答案 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 JOIN
和LEFT 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)