我见过称为 LEFT OUTER JOIN 或 RIGHT OUTER JOIN 的连接。在某些地方我见过 LEFT JOIN 或 RIGHT JOIN。我对此感到困惑。
两天前我发布了一个问题,但我无法理解解决方案提供的链接。
这些类型的连接是相同的,还是两者之间有一些区别?
我见过称为 LEFT OUTER JOIN 或 RIGHT OUTER JOIN 的连接。在某些地方我见过 LEFT JOIN 或 RIGHT JOIN。我对此感到困惑。
两天前我发布了一个问题,但我无法理解解决方案提供的链接。
这些类型的连接是相同的,还是两者之间有一些区别?
两者之间没有区别。参考连接的视觉表示
他们引用的第一个链接为您提供:
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
没有限制条件的。或者您可以将 aninner join
视为cartesian join
具有附加限制(连接条件)的 a。
如果您查看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 是可选的。
在 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
可能无效。