这两个联接将给我相同的结果:

SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK


vs

SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK


表现或其他方面的陈述?

不同的SQL实现之间是否有所不同?

评论

看到以下问题:

附带说明:CROSS JOIN是一种很好的联接类型(与INNER JOIN不同)。

根据ANSI SQL 92规范,它们是相同的:“ 3)如果指定了,但未指定,则INNER是隐式的。”

我非常喜欢简单的JOIN,INNER真的更清晰吗?如果我不带其他字而阅读JOIN,则表示是联接。

#1 楼

它们在功能上是等效的,但是INNER JOIN可能更清晰易读,尤其是在查询中包含其他联接类型(即LEFTRIGHTCROSS)的情况下。

评论


这是否适用于所有数据库(例如SQL,postgres?),是否有人知道解释此内容的文档链接?

–乔格
17-10-25在17:32

这是ANSI SQL标准。查看更多:contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt; zh.wikipedia.org/wiki/SQL-92

–印度
18年1月26日在10:14



@Ivanzinho:键盘笔触不是查询或程序复杂性的度量。现实生活中的复杂性来自可维护性,其中可读性起着主要作用。事实上,当它说INNER JOIN时,您可以确定它的作用,并且应该只是这样,而普通的JOIN会离开您或其他人,不知道标准对实现的含义以及INNER的含义。 / OUTER / LEFT因意外或故意遗漏。

– Tuukka Haapaniemi
2月11日9:52

#2 楼

不,没有区别,纯语法糖。

评论


我不会称其为语法糖。可能是“默认”联接类型,“速记”或“别名”。

–mk12
2015年6月24日13:32



在计算机科学中,语法糖是一种编程语言中的语法,旨在使事物更易于阅读或表达。我相信忽略INNER的能力属于这个定义。

– Quassnoi
2015年6月24日13:35



如果您按字面意义应用定义,是的,但是我一直看到它保留用于更有趣的语法类型,而不仅仅是事物的替代名称。

–mk12
2015年6月25日14:01

@Quassnoi问这个问题的事实,表明INNER的缺乏并不使查询更易于阅读。就我所知,如果未通过此处的答案将JOIN清除,则JOIN很可能表示LEFT JOIN。

–马汀尼斯
17年6月29日在11:50

@Quassnoi您引用的引言性wiki声明确实适用于语法糖,但不足以作为定义。语法加糖是针对复杂语法的特殊情况的更简单语法。更恰当地说INNER是一个“噪音词”。

–philipxy
19年7月8日在20:46



#3 楼

如果在使用单词JOIN时未指定类型,则INNER JOIN = JOIN

INNER JOIN是默认设置。
还可以使用LEFT OUTER JOIN或RIGHT OUTER JOIN,其中如果单词OUTER是可选的,
,或者您可以指定CROSS JOIN。

OR

对于内部联接,语法为: ..
FROM TableA
[INNER] JOIN TableB
(换句话说,“ INNER”关键字是可选的-结果相同
有或没有它)


#4 楼


不同的SQL实现之间是否有所不同?


是的,Microsoft Access不允许仅join。需要inner join

#5 楼

OUTER JOINs类似,单词"OUTER"是可选的。是LEFTRIGHT关键字使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


评论


我与您相反:我总是说“ INNER JOIN”,但我从不使用OUTER。所以“ LEFT JOIN”和“ RIGHT JOIN”。猜猜我只是保持角色数量不变!

–斯蒂芬·霍尔特(Stephen Holt)
2012年3月7日上午10:27

@乔纳森。内部联接没有方向的概念。外部联接会产生不匹配的结果集,并且结果集会根据方向而变化。内部需要匹配,因此方向无关紧要。

–卡尔·基宁格(Karl Kieninger)
2015年5月1日17:51



#6 楼

正如其他答案已经指出的那样,您的示例没有什么区别。是可选的。该页面进一步阐明,


INNER指定返回所有匹配的行对。丢弃两个表中不匹配的行。如果未指定任何联接类型,则默认为



语法也确实表明在某些时候需要INNER。指定连接提示时。

请参见下面的示例

<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN