提问



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


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


VS


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


表现或其他方面的陈述是否有任何区别?


不同的SQL实现之间是否有所不同?

最佳参考


它们在功能上是等价的,但INNER JOIN可以更清楚地阅读,特别是如果查询中包含其他连接类型(即LEFTRIGHTCROSS) 。

其它参考1


输入JOIN默认情况下执行INNER JOIN


对于所有其他人来说,一张图片有时候价值超过几百个字:





图片由Code Project提供。[27]




其它参考2


不,没有区别,纯粹的语法糖[28]

其它参考3


INNER JOIN =加入:[29]



  如果您在使用JOIN一词时未指定类型,INNER JOIN是默认值。

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



要么



  对于内连接,语法为:

  
  选择......

  来自TableA

  [[INNER]]加入TableB

  
  (换句话说,INNER关键字可选 - 结果相同
  有没有)


其它参考4


OUTER JOINs类似,单词"OUTER"是可选的。它是LEFTRIGHT关键字使JOIN成为"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

其它参考5



  不同的SQL实现之间是否有所不同?



是的,Microsoft Access不允许join。它需要inner join[30] [31]

其它参考6


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


这里记录了相关的语法位[32]


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


[33]