当前位置:  开发笔记 > 数据库 > 正文

JOIN和INNER JOIN之间的区别

如何解决《JOIN和INNERJOIN之间的区别》经验,为你挑选了6个好方法。

这两个连接都会给我相同的结果:

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

VS

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

表现或其他方面的陈述是否有任何区别?

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



1> palehorse..:

它们在功能上是等价的,但INNER JOIN读取起来可能更清晰,特别是如果查询中包含其他连接类型(即LEFTRIGHTCROSS).


也许我是纯粹主义者,但我认为在编写SQL时,明确而不是隐含更好.INNER JOIN更具可读性,特别是在复杂查询中.
通过编写JOIN,查询很清楚,INNER只是噪音.
对所有数据库都是如此(例如SQL,postgres?)有没有人知道解释这个的文档的链接?
明确同意“内部”更具可读性。
它是ANSI SQL标准.查看更多:http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt; https://en.wikipedia.org/wiki/SQL-92

2> Quassnoi..:

不,没有区别,纯粹的语法糖.


*在计算机科学中,语法糖是编程语言中的语法,旨在使事物更易于阅读或表达*.我相信省略`INNER`的能力属于这个定义.
我不会称这种语法糖."默认"加入类型,"速记"或"别名"也许.
如果你非常直接地应用这个定义,是的,但我总是看到它保留了更有趣的语法类型,而不仅仅是事物的替代名称.
@Quassnoi事实上这个问题被问到,显示"INNER"的缺席确实_not_使查询更容易阅读.据我所知,如果没有通过这里的答案清除,那么`JOIN`就可能意味着"LEFT JOIN".
@Quassnoi您的评论引述的wiki引言确实适用于语法糖,但不足以作为定义。语法加糖是针对复杂语法的特殊情况的更简单语法。更恰当地说INNER是一个“噪音词”。

3> net_prog..:

INNER JOIN =加入:

如果在使用单词JOIN时未指定类型, INNER JOIN是默认值.

您也可以使用LEFT OUTER JOIN或RIGHT OUTER JOIN,在这种情况下,单词OUTER是可选的,或者您可以指定CROSS JOIN.

要么

对于内连接,语法为:

SELECT ...
FROM TableA
[INNER] JOIN TableB

(换句话说,"INNER"关键字是可选的 - 无论是否有结果都是相同的)



4> Michał Powag..:

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

是的,Microsoft Access不允许join.它需要inner join.



5> Kristen..:

OUTER JOINs此类似,这个词"OUTER"是可选的.它是LEFT或者RIGHT关键字使得JOINa "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 JOIN",但我从不使用OUTER; 所以"LEFT JOIN"和"RIGHT JOIN".猜猜我只是保持我的角色数不变!
@ Jonathan.内连接上没有方向概念.外连接可以产生无与伦比的结果集,并且可以根据方向而变化.内部要求匹配所以方向无关紧要.

6> Martin Smith..:

正如其他答案已经说明的那样,你的例子没有区别.

语法的相关位被记录在这里

 ::= 
    [ { 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;

在此输入图像描述

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有