62

我见过称为 LEFT OUTER JOIN 或 RIGHT OUTER JOIN 的连接。在某些地方我见过 LEFT JOIN 或 RIGHT JOIN。我对此感到困惑。

两天前我发布了一个问题,但我无法理解解决方案提供的链接。

这些类型的连接是相同的,还是两者之间有一些区别?

4

5 回答 5

83

两者之间没有区别。参考连接的视觉表示

于 2013-03-15T06:00:02.803 回答
33

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

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。

于 2013-03-15T06:03:45.407 回答
4

如果您查看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 是可选的。

于 2013-03-15T06:09:24.537 回答
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可能无效。

于 2013-03-15T06:00:47.817 回答
1

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

看这里这里

于 2013-03-15T07:13:31.103 回答