在SQL中编写左/右连接时是否使用OUTER关键字?
我经常看到这样编写SQL的人:在SQL中编写左/右连接时是否使用OUTER关键字?,sql,syntax,rdbms-agnostic,Sql,Syntax,Rdbms Agnostic,我经常看到这样编写SQL的人: SELECT * from TableA LEFT OUTER JOIN TableB ON (ID1=I2) 我自己写得很简单: SELECT * from TableA LEFT JOIN TableB ON (ID1=I2) 对我来说,“OUTER”关键字就像是行噪声——它不添加额外的信息,只是扰乱了SQL。在我所知道的大多数RDBMS中,它甚至是可选的。所以为什么人们还在写它?这是一种习惯吗?便携性?(你的SQL真的可以移植吗?)。例如,我更喜欢使用也
SELECT * from TableA LEFT OUTER JOIN TableB ON (ID1=I2)
我自己写得很简单:
SELECT * from TableA LEFT JOIN TableB ON (ID1=I2)
对我来说,“OUTER”关键字就像是行噪声——它不添加额外的信息,只是扰乱了SQL。在我所知道的大多数RDBMS中,它甚至是可选的。所以为什么人们还在写它?这是一种习惯吗?便携性?(你的SQL真的可以移植吗?)。例如,我更喜欢使用也可选的AS关键字,因为
SELECT。。。从表中,t
看起来比选择更可读。。。从表t中为我选择。是
在我看来,这只会让事情变得更清楚——你陈述的意图越清晰、越明显越好(特别是对于以后试图阅读和理解你的代码的其他人)
但这只是我的观点——技术上不需要,所以你可以使用它——或者离开它。
外部
确实是多余的,正如你所写的,因为所有外部
连接要么是左
要么右
,反过来所有左
或右
连接都是外部
。所以,正如你所说,在句法上,它主要是噪音。即使在ISO SQL中,它也是可选的。至于人们为什么使用它,我想有些人觉得需要坚持连接是OUTER
,即使left或right关键字已经这么说了。就这点而言,内部
也是多余的 我使用的是“内部联接”、“左联接”、“右联接”和“完全外部联接”没有“内在”的“加入”对我来说有点模棱两可“left”和“right”是自描述性的,而“full”是一种野兽,它应该有特殊的语法:)不,我使用
- 加入
- 左连接
- 右连接
- 完全外接
- 交叉连接
对我来说没有歧义。我自己使用
OUTER
关键字。我同意这仅仅是一个品味的问题,但省略它让我觉得有点马虎,但没有省略内部的关键字(马虎)或用小写形式编写SQL关键字(非常马虎)那么糟糕.Stackoverflow的几个月告诉我的一件事是,以前从未接触过SQL或关系数据库的人编写和/或维护了多少SQL
出于这个原因,我认为,在查看代码时,下一个程序员的表现越清晰越好。我认为在2009年无论如何都没有可移植SQL这样的东西。。。在某些时候,您需要编写特定于DBMS的语句(比如检索前N行)
我个人认为连接语法是多余的,我用逗号分隔表名。+1表示“特别是对于以后试图阅读和理解您的代码的其他人”为什么不使用完全连接而不是完全外部连接
?出于某种原因,我最终只使用单词outer表示完全外部连接。我无法解释,听起来好多了。我想是我个人的喜好。我完全同意。外部关键字只是噪声。少即是多。当我们不确定表中的哪一个实际包含数据时,我们是否可以使用它。我们需要来自任何一个表的数据?听起来您需要完全[OUTER]连接
,尽管您的描述不太清楚。也许你需要一个工会
。写一个新问题,详细描述你的数据和结构。我问了一些使用内部/外部选择器的同事,对他们来说,这更像是一个图像参考;当他们放置外部时,他们想象维恩图的外部部分。对我来说,这总是一种噪音。