这两个连接都会给我相同的结果:
SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK
对比
SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK
性能或其他方面的陈述之间有什么区别吗?
不同的 SQL 实现之间有区别吗?
它们在功能上是等效的,但 INNER JOIN
可以更清晰地阅读,特别是如果查询中包含其他连接类型(即 LEFT
或 RIGHT
或 CROSS
)。
不,没有区别,纯粹的 syntactic sugar。
INNER
的能力属于此定义。
INNER
确实 not 使查询更易于阅读。据我所知,如果这里的答案没有澄清,JOIN
很可能意味着 LEFT JOIN
。
内连接 = 连接
如果您在使用单词 JOIN 时未指定类型,则默认为 INNER JOIN。您还可以使用 LEFT OUTER JOIN 或 RIGHT OUTER JOIN,在这种情况下,单词 OUTER 是可选的,或者您可以指定 CROSS JOIN。
或者
对于内连接,语法为:SELECT ... FROM TableA [INNER] JOIN TableB(换句话说,“INNER”关键字是可选的 - 有或没有它的结果都相同)
与 OUTER JOINs
类似,单词 "OUTER"
是可选的。正是 LEFT
或 RIGHT
关键字使 JOIN
成为 "OUTER" JOIN
。
但是由于某种原因,我总是像在 LEFT OUTER JOIN
中一样使用 "OUTER"
而从不使用 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
正如其他答案已经说明的那样,您的示例没有区别。
相关的语法位是 documented here
<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;
https://i.stack.imgur.com/J4DX4.png