这两个连接都会得到相同的结果:

SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK

vs

SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK

这些陈述在性能或其他方面有什么区别吗?

不同的SQL实现之间有区别吗?


当前回答

不,没有区别,纯粹的语法糖。

其他回答

与OUTER join类似,单词“OUTER”是可选的。LEFT或RIGHT关键字使JOIN成为“OUTER”JOIN。

然而,出于某种原因,我总是使用“OUTER”作为LEFT OUTER JOIN,从不使用LEFT JOIN,但我从不使用INNER JOIN,而只是使用“JOIN”:

SELECT ColA, ColB, ...
FROM MyTable AS T1
     JOIN MyOtherTable AS T2
         ON T2.ID = T1.ID
     LEFT OUTER JOIN MyOptionalTable AS T3
         ON T3.ID = T1.ID

它们在功能上是等价的,但是INNER JOIN读起来更清楚一些,特别是当查询中包含其他连接类型(例如LEFT、RIGHT或CROSS)时。

内部连接=连接

如果在使用JOIN时没有指定类型,则INNER JOIN是默认值。 您还可以使用LEFT OUTER JOIN或RIGHT OUTER JOIN,在这种情况下,单词OUTER是可选的,或者您可以指定CROSS JOIN。

OR

对于INNER JOIN,语法是: 选择…… 从为多 JOIN TableB (换句话说,INNER关键字是可选的——使用或不使用它的结果是相同的。)

正如其他答案已经说明的那样,在你的例子中没有区别。

相关的语法记录在这里

<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN

显示所有都是可选的。这篇文章进一步阐明了这一点

INNER返回所有匹配的行对。丢弃 两个表中不匹配的行。当未指定连接类型时,此 是默认值。

语法还指出,有一种情况需要使用INNER。当指定连接提示时。

参见下面的示例

CREATE TABLE T1(X INT);
CREATE TABLE T2(Y INT);

SELECT *
FROM   T1
       LOOP JOIN T2
         ON X = Y;

SELECT *
FROM   T1
       INNER LOOP JOIN T2
         ON X = Y;

不同的SQL实现之间有区别吗?

是的,Microsoft Access不仅仅允许加入。它需要内部连接。