Sql 连接和内部连接之间的区别

Sql 连接和内部连接之间的区别,sql,sql-server,join,inner-join,Sql,Sql Server,Join,Inner Join,这两个联接将给出相同的结果: SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK vs 这些陈述在性能或其他方面是否有任何差异 不同的SQL实现之间是否存在差异 不,没有区别,纯。它们在功能上是等价的,但是内部连接可以更清晰地阅读,特别是当查询中包含其他连接类型(即左或右或交叉)时。与外部连接类似,单词“外部”是可选的。正是左或右关键字使连接成为外部连接 然而,由于某种原因,我总是使用“外部”,就像在左外部联接中一样,

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

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

这些陈述在性能或其他方面是否有任何差异


不同的SQL实现之间是否存在差异

不,没有区别,纯。

它们在功能上是等价的,但是
内部连接
可以更清晰地阅读,特别是当查询中包含其他连接类型(即
交叉
)时。

外部连接
类似,单词
“外部”
是可选的。正是
关键字使
连接成为
外部连接

然而,由于某种原因,我总是使用
“外部”
,就像在
左外部联接中一样,并且从不使用
左联接
,但我从不使用
内部联接
,而是只使用
联接

内部连接=连接

如果在使用JOIN一词时未指定类型,则“内部联接”是默认值

也可以使用左外连接或右外连接,在这种情况下,单词OUTER是可选的, 也可以指定交叉连接

对于内部联接,语法为:

选择…
来自表a
[内部]加入表B

(换句话说,“内部”关键字是可选的,结果相同 (带或不带)

不同的SQL实现之间是否存在差异


是的,不允许只加入
。它需要。

因为其他答案已经表明,在您的示例中没有区别

相关的语法是


请看这个问题:作为旁注:交叉连接是一种众所周知的连接类型(它不同于内部连接)。根据ANSI SQL 92规范,它们是相同的:“3)如果指定了a,而未指定a,则内部是隐式的。“我非常喜欢简单连接,内部是否真的更清晰?”?如果我读JOIN时没有其他词,那就是JOIN。我与你相反:我总是说“内部连接”,但我从不使用外部连接;所以“左连接”和“右连接”。我想我只是保持我的角色数量不变@在内部连接上没有方向的概念。外部联接可以生成不匹配的结果集,并且这些结果集可以根据方向而变化。内部需要匹配,所以方向不重要。我不会称之为语法糖。“默认”连接类型、“速记”或“别名”可能。在计算机科学中,语法糖是编程语言中的语法,旨在使事物更易于阅读或表达。我相信省略
内部
的能力属于这个定义。如果你按照字面意思应用这个定义,是的,但我一直认为它是为更有趣的语法类型保留的,而不仅仅是事物的替代名称。@quassno仅仅是因为有人问这个问题,显示缺少
内部
不会使查询更易于阅读。据我所知,
JOIN
很可能意味着
LEFT JOIN
,如果这里的答案没有澄清的话。@Quassnoi你的评论引用的wiki介绍性语句在语法上是正确的,但作为一个定义它是不够的。句法糖化是关于复杂语法的特殊情况下更简单的语法。更恰当的说法是,INNER是一个“噪音词”。这是否适用于所有数据库(例如SQL、postgres?)有人知道解释这一点的文档链接吗?这是ANSI SQL标准。见更多:@Ivanzinho:键盘笔划不是查询或程序复杂性的衡量标准。现实生活中的复杂性来自可维护性,其中可读性起着主要作用。事实上,当它说内部连接时,你可以确定它是做什么的,并且它应该是这样的,而普通连接会让你或其他人怀疑标准对实现的看法,以及内部/外部/遗漏是出于偶然还是出于目的。感谢@Indian的链接。当描述第180页的生成语法时,第一页的第181页有一个键:“如果指定了a,而没有指定a,那么内部是隐式的。”
SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK
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
<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN
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;