这两个连接都会给我相同的结果:
SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK
对
SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK
这些陈述在性能或其他方面有什么区别吗?
不同的SQL实现之间有什么不同吗?
它们在功能上是等效的,但是
INNER JOIN
可以更清晰地阅读,特别是如果查询包含其他连接类型(即LEFT
或RIGHT
或CROSS
)。
不,没有区别,纯粹的语法糖。
内连接=连接
INNER JOIN 是默认值(如果您在使用 JOIN 一词时未指定类型)。
您还可以使用 LEFT OUTER JOIN 或 RIGHT OUTER JOIN,在这种情况下,单词 OUTER 是可选的,或者您可以指定 CROSS JOIN。
或
对于 INNER JOIN,语法为:
SELECT ...
FROM TableA
[INNER] JOIN TableB
(换句话说,INNER 关键字是 可选——无论有没有它,结果都是一样的。)
与
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
正如其他答案已经指出的那样,您的示例没有区别。
相关语法部分记录在此处
<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;
INNER JOIN 与 JOIN 相同。 没有性能优势或输出差异。 当与以“ON”编写的等效条件(例如表的一列等于第二个表的一列)一起使用时,两者都会给出交集。
这也可以根据旧语法来实现,而无需完全使用单词 join ,如下所示。
从表 1、表 2 中选择 *,其中表 1.COLUMN1=表 2.COLUMN4;
(对列使用随机数)
以上三种方法给出的结果完全相同。