这两个连接都会给我相同的结果:
SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK
对比
SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK
性能或其他方面的陈述之间有什么区别吗?
不同的SQL实现之间有区别吗?
这两个连接都会给我相同的结果:
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
orRIGHT
或CROSS
)时。
不,没有区别,纯语法糖。
内连接 = 连接
如果您在使用单词 JOIN 时未指定类型,则默认为 INNER JOIN。
您还可以使用 LEFT OUTER JOIN 或 RIGHT OUTER JOIN,在这种情况下,单词 OUTER 是可选的,或者您可以指定 CROSS JOIN。
或者
对于内连接,语法是:
SELECT ...
FROM TableA
[INNER] JOIN TableB(换句话说,“INNER”关键字是可选的——有或没有它的结果都是一样的)
不同的 SQL 实现之间有区别吗?
是的,Microsoft Access不允许仅join
. 它需要inner join
.
与 类似OUTER JOINs
,该词"OUTER"
是可选的。是LEFT
orRIGHT
关键字使JOIN
an "OUTER" JOIN
。
但是由于某种原因,我总是使用"OUTER"
as inLEFT OUTER JOIN
和 never 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;