JOIN 和 INNER JOIN 有什么区别?

问题描述 投票:0回答:7

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

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

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

这些陈述在性能或其他方面有什么区别吗?

不同的SQL实现之间有什么不同吗?

sql sql-server join inner-join
7个回答
1568
投票

它们在功能上是等效的,但是

INNER JOIN
可以更清晰地阅读,特别是如果查询包含其他连接类型(即
LEFT
RIGHT
CROSS
)。


355
投票

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


230
投票

内连接=连接

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

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

  • 对于 INNER JOIN,语法为:

    SELECT ...
    FROM TableA
    [INNER] JOIN TableB
    

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


78
投票

不同的SQL实现之间有什么不同吗?

是的,Microsoft Access 不允许仅使用

join
。它需要
inner join


61
投票

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

但是由于某种原因,我总是使用

"OUTER"
,就像
LEFT OUTER JOIN
一样,从不使用
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

43
投票

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

相关语法部分记录在此处

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


-2
投票

INNER JOIN 与 JOIN 相同。 没有性能优势或输出差异。 当与以“ON”编写的等效条件(例如表的一列等于第二个表的一列)一起使用时,两者都会给出交集。

这也可以根据旧语法来实现,而无需完全使用单词 join ,如下所示。

从表 1、表 2 中选择 *,其中表 1.COLUMN1=表 2.COLUMN4;

(对列使用随机数)

以上三种方法给出的结果完全相同。

© www.soinside.com 2019 - 2024. All rights reserved.