这两个连接都会得到相同的结果:
SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK
vs
SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK
这些陈述在性能或其他方面有什么区别吗?
不同的SQL实现之间有区别吗?
这两个连接都会得到相同的结果:
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不仅仅允许加入。它需要内部连接。