这两个连接将给我相同的结果:
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 JOIN
LEFT
RIGHT
CROSS
与OUTER JOINs类似,单词"OUTER"是可选的。正是LEFT或RIGHT关键字使JOIN成为"OUTER" JOIN。
OUTER JOINs
"OUTER"
JOIN
"OUTER" JOIN
然而,出于某种原因,我总是使用"OUTER"作为LEFT OUTER JOIN而不是LEFT JOIN,但我从不使用INNER JOIN,而是我只是使用"JOIN":
LEFT OUTER JOIN
LEFT JOIN
"JOIN"
SELECT ColA, ColB, ...FROM MyTable AS T1JOIN MyOtherTable AS T2ON T2.ID = T1.IDLEFT OUTER JOIN MyOptionalTable AS T3ON T3.ID = T1.ID
内部连接=连接
INNER JOIN是使用JOIN一词时的默认如果你不指定类型。
您还可以使用LEFT OUTER JOIN或右OUTER JOIN,在这种情况下,OUTER一词是可选的,或者您可以指定CROSS JOIN。
或
对于INNER JOIN,语法为:
SELECT ...FROM TableA[INNER] JOIN TableB
(换句话说,INNER关键字是可选——有或没有它,结果是相同的。
是的,microsoftAccess不允许只有join。它需要#1。
join
正如其他答案已经指出的那样,您的示例没有区别。
相关的语法是这里记录
<join_type> ::=[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]JOIN
显示所有都是可选的。该页面进一步澄清了
INNER指定返回所有匹配的行对。丢弃两个表中不匹配的行。未指定连接类型时,此是默认的。
INNER
语法也表明有一次需要INNER是。当指定连接提示时。
请看下面的例子
CREATE TABLE T1(X INT);CREATE TABLE T2(Y INT); SELECT *FROM T1LOOP JOIN T2ON X = Y; SELECT *FROM T1INNER LOOP JOIN T2ON X = Y;