SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK
vs
SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK
表现或其他方面的陈述?
不同的SQL实现之间是否有所不同?
#1 楼
它们在功能上是等效的,但是INNER JOIN
可能更清晰易读,尤其是在查询中包含其他联接类型(即LEFT
或RIGHT
或CROSS
)的情况下。评论
这是否适用于所有数据库(例如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 = JOININNER 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"
是可选的。是LEFT
或RIGHT
关键字使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
评论
看到以下问题:附带说明:CROSS JOIN是一种很好的联接类型(与INNER JOIN不同)。
根据ANSI SQL 92规范,它们是相同的:“ 3)如果指定了
我非常喜欢简单的JOIN,INNER真的更清晰吗?如果我不带其他字而阅读JOIN,则表示是联接。