2009-02-19 106 views
708

这两加入会给我同样的结果:差异JOIN和INNER JOIN

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

VS

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

是否有性能或声明,否则有什么区别?

它在不同的SQL实现中有所不同吗?

+0

的例子见这样的问题: 2009-02-19 14:50:00

+1

作为附带说明:CROSS JOIN是一个很高兴知道连接类型(它不同于INNER JOIN)。 – Serge 2013-05-14 11:57:02

+5

应该重新打开,因为其他问题表示为等效的不是。 OP询问在写入JOIN或INNER JOIN时是否有区别 – 2014-07-02 12:06:27

回答

789

它们在功能上等同,但INNER JOIN可以是一个有点清晰阅读,特别是如果查询其他参加包含在它的类型(即LEFTRIGHTCROSS)。

195

不,没有区别,纯syntactic sugar

+11

我不会称这种语法糖。也许是“默认”连接类型,“简写”或“别名”。 – mk12 2015-06-24 13:32:18

+34

*在计算机科学中,语法糖是一种编程语言中的语法,旨在使事情更容易阅读或表达*。我相信省略“INNER”的能力属于这个定义。 – Quassnoi 2015-06-24 13:35:47

43
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 
108

INNER JOIN = JOIN

INNER JOIN是如果您在使用单词JOIN时没有指定类型,则为默认值。

您还可以使用LEFT OUTER JOIN或RIGHT OUTER JOIN,在这种情况下OUTER字可选, 或者您可以指定CROSS JOIN。

OR

对于内部联接,语法是:

SELECT ...
FROM表A
[INNER] JOIN表B

(换言之, “INNER”关键字是可选 - 结果与 相同或不同)

37

它在不同的SQL实现之间有所不同吗?

是的,MS Access不允许只是join它需要inner join

591

只要输入JOIN默认执行INNER JOIN

对于所有的人,一个画面有时价值超过字的百位:中CodeProject


20

enter image description here

图片提供:由于其他答案已经说明存在无差异你的榜样。

语法的相关位为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; 

enter image description here