JOIN和INNER JOIN之间的区别

时间:2009-02-19 14:47:30

标签: sql sql-server join inner-join

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

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

VS

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

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

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

6 个答案:

答案 0 :(得分:960)

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

答案 1 :(得分:217)

不,没有区别,纯syntactic sugar

答案 2 :(得分:119)

INNER JOIN = JOIN

  

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

     

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

OR

  

对于内连接,语法为:

     

选择...
  从表A中   [INNER]加入TableB

     

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

答案 3 :(得分:46)

OUTER JOINs类似,单词"OUTER"是可选的。 LEFTRIGHT关键字使JOIN成为"OUTER" JOIN

但出于某些原因,我始终使用"OUTER" LEFT OUTER JOINLEFT 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

{{1}}

答案 4 :(得分:44)

  

不同的SQL实现之间是否存在差异?

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

答案 5 :(得分:24)

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

语法的相关位是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;

enter image description here