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实现之间是否有所不同?

844940 次浏览

不,没有区别,纯语法糖

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

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

然而,出于某种原因,我总是使用"OUTER"作为LEFT OUTER JOIN而不是LEFT JOIN,但我从不使用INNER JOIN,而是我只是使用"JOIN"

SELECT ColA, ColB, ...FROM MyTable AS T1JOIN MyOtherTable AS T2ON T2.ID = T1.IDLEFT OUTER JOIN MyOptionalTable AS T3ON T3.ID = T1.ID

内部连接=连接

  • INNER JOIN是使用JOIN一词时的默认如果你不指定类型。

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

  • 对于INNER JOIN,语法为:

    SELECT ...FROM TableA[INNER] JOIN TableB

    (换句话说,INNER关键字是可选——有或没有它,结果是相同的。

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

是的,microsoftAccess不允许只有join。它需要#1

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

相关的语法是这里记录

<join_type> ::=[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]JOIN

显示所有都是可选的。该页面进一步澄清了

INNER指定返回所有匹配的行对。丢弃两个表中不匹配的行。未指定连接类型时,此是默认的

语法也表明有一次需要INNER。当指定连接提示时。

请看下面的例子

CREATE TABLE T1(X INT);CREATE TABLE T2(Y INT);
SELECT *FROM   T1LOOP JOIN T2ON X = Y;
SELECT *FROM   T1INNER LOOP JOIN T2ON X = Y;

在此处输入图片描述