本周末看看JOIN。
我正在阅读加入并看到大量的JOIN,LEFT,RIGHT,OUTER,FULL,INNER组合。我检查了MSDN文档,它看起来像是唯一允许的组合形式:
< join_type > ::=
[ INNER | { { LEFT | RIGHT | FULL } [ OUTER] } ]
[ < join_hint > ]
JOIN
因此,我认为你只能得到:
JOIN / INNER JOIN LEFT JOIN / LEFT OUTER JOIN RIGHT JOIN / RIGHT OUTER JOIN FULL JOIN / FULL OUTER JOIN
此外,OUTER似乎是一个可选关键字,因此LEFT JOIN和LEFT OUTER JOIN实际上是相同的。它是否正确? JOIN和FULL OUTER JOIN有什么区别?我在脚本中看到过单独的JOIN,但是无法将其分解,因为查询有点复杂。
答案 0 :(得分:4)
只有三种连接:CROSS,INNER和OUTER。
在外连接(仅外连接)中,还有三种子类型:LEFT,RIGHT和FULL。
因为LEFT,RIGHT和FULL仅适用于OUTER连接,所以有时会省略OUTER关键字,而只是简单地指定哪种外连接(即,只是“LEFT JOIN”)。
答案 1 :(得分:1)
这些都是可以在表源之间进行的有效语法:
JOIN
INNER JOIN
LEFT JOIN
LEFT OUTER JOIN
RIGHT JOIN
RIGHT OUTER JOIN
FULL JOIN
FULL OUTER JOIN
每个都需要以下ON子句。
你是正确的OUTER是可选的,因此RIGHT JOIN与RIGHT OUTER JOIN相同,同样适用于LEFT和FULL。此外,如果没有,则INNER是可选的,因此JOIN与INNER JOIN相同。
还有CROSS JOIN,它与逗号相同,没有ON子句。换句话说,
FROM A CROSS JOIN B
和
FROM A,B
意思完全相同。
表运算符JOIN和FULL OUTER JOIN完全不相同。表源
FROM A JOIN B ON <condition>
仅包含其行为true的行。另一方面,表源
FROM A FULL OUTER JOIN B ON <condition>
包含的行为以及您在LEFT OUTER JOIN或具有相同ON子句的RIGHT OUTER JOIN中获得的所有其他行。
答案 2 :(得分:1)
您似乎拥有的组合多于支持的组合:
<join_type> ::=
[ INNER | { { LEFT | RIGHT | FULL } [ OUTER] } ]
[ <join_hint> ]
JOIN
这说你可以:
JOIN INNER JOIN
LEFT JOIN LEFT OUTER JOIN
RIGHT JOIN RIGHT OUTER JOIN
FULL JOIN FULL OUTER JOIN
换句话说,关键字OUTER是可选的。在完整的SQL标准中,您还可以拥有NATURAL JOIN或CROSS JOIN。关键字INNER也是可选的;简单的“加入”是一个内部联接。
实际上,你答案的格式化让我觉得你不理解;它使用LEFT JOIN运行INNER JOIN(如果没有其他人的话,我会很快解决这个问题。)
FULL JOIN与普通(INNER)JOIN完全不同。 INNER JOIN简单地基于指定的标准(由ON子句或USING子句指定)。 LEFT OUTER JOIN包含INNER JOIN的行以及左侧表中未与右侧表连接的那些行,右侧表中的每一列都使用NULL扩展。这有时被称为“左外增量”。 RIGHT OUTER JOIN反转了外连接的意义(所以有一个'右外增量')。 FULL JOIN由INNER JOIN和左外增量和右外增量的并集组成。 FULL JOIN的结果没有主键,因为每列中通常都有空值。
答案 3 :(得分:0)
Wikipedia article on SQL join很清楚,有很多例子。