这两个连接将给我相同的结果:
SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK
vs
SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK
这些语句在性能或其他方面有区别吗?
不同的 SQL 实现之间是否有差异?
这两个连接将给我相同的结果:
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
更容易阅读,特别是当查询中包含其他连接类型(即LEFT
或RIGHT
或CROSS
)时。
没有区别,纯粹是 语法糖。
INNER
就符合这个定义。 - QuassnoiINNER
并不会使查询更易读。就我所知,如果没有这里的答案进行澄清,JOIN
很可能意味着LEFT JOIN
。 - martennis内连接 = 连接
当使用单词JOIN而不指定类型时,INNER JOIN是默认选项。
您还可以使用LEFT OUTER JOIN或RIGHT OUTER JOIN,此时单词OUTER是可选的,或者您可以指定CROSS 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;