1236

这两个连接都会给我相同的结果:

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

对比

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

性能或其他方面的陈述之间有什么区别吗?

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

4

6 回答 6

1338

它们在功能上是等效的,但INNER JOIN读起来会更清晰一些,尤其是当查询中包含其他连接类型(即LEFTorRIGHTCROSS)时。

于 2009-02-19T14:50:21.047 回答
300

不,没有区别,纯语法糖

于 2009-02-19T14:48:41.440 回答
186

内连接 = 连接

如果您在使用单词 JOIN 时未指定类型,则默认为 INNER JOIN。

您还可以使用 LEFT OUTER JOIN 或 RIGHT OUTER JOIN,在这种情况下,单词 OUTER 是可选的,或者您可以指定 CROSS JOIN。

或者

对于内连接,语法是:

SELECT ...
FROM TableA
[INNER] JOIN TableB

(换句话说,“INNER”关键字是可选的——有或没有它的结果都是一样的)

于 2012-02-28T08:23:14.833 回答
68

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

是的,Microsoft Access不允许仅join. 它需要inner join.

于 2012-05-15T13:33:06.427 回答
58

与 类似OUTER JOINs,该词"OUTER"是可选的。是LEFTorRIGHT关键字使JOINan "OUTER" JOIN

但是由于某种原因,我总是使用"OUTER"as inLEFT OUTER JOIN和 never 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
于 2009-02-19T15:09:36.257 回答
36

正如其他答案已经说明的那样,您的示例没有区别。

此处记录了相关的语法

<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;

在此处输入图像描述

于 2015-08-02T16:38:33.163 回答