Sql 为什么在Oracle中很少使用(+;)语法?

Sql 为什么在Oracle中很少使用(+;)语法?,sql,oracle,join,syntax,Sql,Oracle,Join,Syntax,话题。 我很困惑,真的需要一个很好的解释 谢谢大家! 有一种方法可以使用外部/内部联接语法在ANSI SQL中指定它 只有Oracle和其他供应商支持(+)语法,因此最好使用所有数据库中支持的语法。有一种方法可以在ANSI SQL中使用外部/内部联接语法指定它 只有Oracle和可能是其他供应商支持(+)语法,因此最好使用所有数据库中支持的语法。表示法是Oracle供应商特定的表单,不同供应商之间不一致,MS SQL Server使用*也有类似的表单,这会造成巨大的混乱,我相信*位于=。你说的“

话题。 我很困惑,真的需要一个很好的解释


谢谢大家!

有一种方法可以使用外部/内部联接语法在ANSI SQL中指定它


只有Oracle和其他供应商支持(+)语法,因此最好使用所有数据库中支持的语法。

有一种方法可以在ANSI SQL中使用外部/内部联接语法指定它


只有Oracle和可能是其他供应商支持(+)语法,因此最好使用所有数据库中支持的语法。

表示法是Oracle供应商特定的表单,不同供应商之间不一致,MS SQL Server使用*也有类似的表单,这会造成巨大的混乱,我相信*位于=。你说的“左连接”等的ANSI格式更具可读性,是标准格式


对于旧表单,有一些事情更容易处理,因此您仍然偶尔会看到它。每次我看到它,我都不得不回到以前的时间,穿上我的喇叭裤,希望我能理解作者想要什么。

符号是Oracle供应商特有的表单,不同供应商之间不一致,MS SQL Server也有类似的表单,使用*会引起巨大的混乱,我相信*在=。你说的“左连接”等的ANSI格式更具可读性,是标准格式


对于旧表单,有一些事情更容易处理,因此您仍然偶尔会看到它。每次我看到它,我都不得不回到以前,穿上我的喇叭裤,希望我能理解作者想要什么。

为什么(+)语法现在不像以前那么多使用有几个原因:

  • Oracle现在完全支持ANSI语法(早期Oracle版本并非如此)
  • ANSI语法在不同的RDBMS之间是可移植的,而(+)则不是
  • ANSI语法(可以说)更具可读性,因为它将连接条件与筛选条件分开
  • 不能使用(+)语法进行完全外部联接
  • ANSI语法允许您在多个列上进行外部联接,而(AFAIK)这在(+)语法中是不可能的

为什么(+)语法在今天没有像以前那样被广泛使用,有几个原因:

  • Oracle现在完全支持ANSI语法(早期Oracle版本并非如此)
  • ANSI语法在不同的RDBMS之间是可移植的,而(+)则不是
  • ANSI语法(可以说)更具可读性,因为它将连接条件与筛选条件分开
  • 不能使用(+)语法进行完全外部联接
  • ANSI语法允许您在多个列上进行外部联接,而(AFAIK)这在(+)语法中是不可能的

另一方面,使用
JOIN
语法(例如完全外部联接,或在联接表上进行过滤)会更容易一些。大多数情况下,使用ANSI表单会更容易。在我以前工作的地方,有一位女士写了最优雅的老式连词,我们其他人都无法理解。我总是在有时间的时候重写它们。另一方面,使用
JOIN
语法(例如完全外部联接,或在联接表上进行过滤)会更容易一些。大多数情况下,使用ANSI表单会更容易。在我以前工作的地方,有一位女士写了最优雅的老式连词,我们其他人都无法理解。我总是在有时间的时候重写它们。因此(+)适用于Oracle的所有版本,但不适用于所有RDBMS。是这样吗?谢谢。+适用于我见过的所有Oracle版本,但结果不是可移植的…@PeterWooster portable你是说另一个RDBMS?是的,如果你用ANSI风格编写代码,并且避免使用诸如CONNECT BY之类的酷功能,你就可以以较少的问题移植到另一个RDBMS。SEQUENCE之类的东西可能与MySQL上的autoincrement完全不同,或者与PostGresQL中的语法略有不同。另一个问题是,
(+)
语法有时会在存在多个外部联接时导致不明确的结果。因此(+)适用于所有Oracle版本,但不适用于所有RDBMS。是这样吗?谢谢。+适用于我见过的所有Oracle版本,但结果不是可移植的…@PeterWooster portable你是说另一个RDBMS?是的,如果你用ANSI风格编写代码,并且避免使用诸如CONNECT BY之类的酷功能,你就可以以较少的问题移植到另一个RDBMS。SEQUENCE之类的东西可能与MySQL上的autoincrement完全不同,或者与PostGresQL中的语法略有不同。另一个问题是,当存在多个外部联接时,
(+)
语法有时会导致不明确的结果。