这两个连接都会给我相同的结果:
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 =加入:
如果在使用单词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
或者RIGHT
关键字使得JOIN
a "OUTER" JOIN
.
但是由于某种原因,我总是使用"OUTER"
in in LEFT 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
正如其他答案已经说明的那样,你的例子没有区别.
语法的相关位被记录在这里
::= [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ ] ] 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;