这两个连接都会给我相同的结果:
SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK
VS
SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK
表现或其他方面的陈述是否有任何区别?
不同的SQL实现之间是否有所不同?
答案 0 :(得分:960)
它们在功能上是等价的,但INNER JOIN
可以更清楚地阅读,特别是如果查询具有其他连接类型(即LEFT
或RIGHT
或CROSS
)包含在其中。
答案 1 :(得分:217)
不,没有区别,纯syntactic sugar。
答案 2 :(得分:119)
如果您在使用单词JOIN时未指定类型,则INNER JOIN是默认值。
你也可以使用LEFT OUTER JOIN或RIGHT OUTER JOIN,在这种情况下,单词OUTER是可选的, 或者您可以指定CROSS JOIN。
OR
对于内连接,语法为:
选择...
从表A中 [INNER]加入TableB(换句话说,“INNER”关键字可选 - 结果相同 有或没有它)
答案 3 :(得分:46)
与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
:
{{1}}
答案 4 :(得分:44)
不同的SQL实现之间是否存在差异?
是的,Microsoft Access不允许join
。它需要inner join
。
答案 5 :(得分:24)
正如其他答案已经陈述的那样,你的例子没有区别。
语法的相关位是documented here
<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;