13

我经常看到这样写SQL的人:

SELECT * from TableA LEFT OUTER JOIN TableB ON (ID1=I2)

我自己写的很简单:

SELECT * from TableA LEFT JOIN TableB ON (ID1=I2)

对我来说,“OUTER”关键字就像线路噪音——它没有添加额外的信息,只是让 SQL 变得混乱。在我知道的大多数 RDBMS 中,它甚至是可选的。那么......为什么人们仍然写它?这是一种习惯吗?可移植性?(你的 SQL 真的是可移植的吗?)还有什么我不知道的?

4

8 回答 8

14

OUTER正如您所写,真的是多余的,因为所有OUTER连接都是LEFTor RIGHT,并且反过来所有LEFTorRIGHT连接都是OUTER. 因此,正如您所说,从句法上讲,它主要是噪音。即使在 ISO SQL 中也是可选的。至于人们为什么使用它,我想有些人觉得有必要坚持 join 是OUTER,即使 left-or-right 关键字已经这么说了。那样的话,INNER也是多余的!

于 2009-11-16T11:34:58.037 回答
7

是的

在我看来,它只会让事情变得更清晰——你表达你的意图越清晰、越明显,越好(尤其是对于其他试图稍后阅读和理解你的代码的人来说)。

但这只是我的观点——技术上不需要,所以你可以使用它——或者离开它。

于 2009-11-16T11:34:05.793 回答
3

Stackoverflow 上几个月向我展示的一件事是,有多少 SQL 是由以前完全没有接触过 SQL 或关系数据库的人编写和/或维护的。

出于这个原因,我认为你越明确,下一个程序员在查看你的代码时就会越好。

于 2009-11-16T14:06:06.427 回答
3

不,我用

  • 加入
  • 左连接
  • 正确加入
  • 全外连接
  • 交叉连接

对我来说没有歧义。

于 2009-11-16T12:10:33.523 回答
1

这只是一个品味问题,我猜人们使用它是因为他们发现它导致代码更具可读性。例如,我更喜欢使用可选的 AS 关键字,因为SELECT ... FROM table AS t它看起来比SELECT ... FROM table t我更易读。

于 2009-11-16T11:31:29.607 回答
1

我正在使用“内连接”、“左连接”、“右连接”和“完全外连接”。没有“内部”的“加入”对我来说有点模棱两可;'left' 和 'right' 是自我描述的,而 'full' 是一种野兽,它值得特殊的语法:)

于 2009-11-16T11:44:15.530 回答
0

我自己使用OUTER关键字。我同意这只是一个品味问题,但省略它让我觉得有点草率,但省略INNER关键字(草率)或用小写写 SQL 关键字(非常草率)也没有那么糟糕。

于 2009-11-16T13:55:22.360 回答
0

我认为无论如何在 2009 年都没有可移植 SQL之类的东西……在某些时候,您需要编写特定于 DBMS 的语句(例如检索前 N 行)。

我个人认为 JOIN 语法是多余的,而是用逗号分隔表名。

于 2009-11-16T14:06:43.867 回答