【问题标题】:Oracle db Joins vs FROM a,b,cOracle db Joins vs FROM a,b,c
【发布时间】:2015-04-13 05:30:12
【问题描述】:

我使用 SQL Server db 已经有一段时间了,我会在那里 在我的查询中到处加入表格。

现在我有一个使用 Oracle db 的项目,当我浏览时 一些 oracle 程序员编写的程序,复杂 数据选择 查询时,我注意到她从未使用过联接。

问题:

Oracle 是否有任何具体的暗示不使用连接,或者它的人为因素?

【问题讨论】:

  • 不,在需要的地方使用连接。它们是 SQL 的一部分。

标签: oracle select join


【解决方案1】:

没有。与任何其他合理的关系数据库一样,Oracle 在执行基于集合的操作和执行联接时比在程序上模拟联接(例如嵌套游标循环)时效率更高。

不过,我的猜测是,您实际上并不是在谈论缺少连接的代码。我的猜测是您正在谈论使用与您习惯不同的连接语法的代码。两者都有

SELECT a.*
  FROM a
       JOIN b ON (a.a_id = b.a_id)
       JOIN c ON (b.b_id = c.b_id)

SELECT a.*
  FROM a,
       b,
       c
 WHERE a.a_id = b.a_id
   AND b.b_id = c.b_id

是连接abc 的查询。这两个查询完全相同——Oracle 解析器实际上会在内部将第一个查询重写为第二个查询。唯一的区别是第一个查询使用较新的 SQL 99 语法来指定它的连接。

从历史上看,Oracle 采用 SQL 99 语法相对较晚,有大量代码是在 SQL 99 语法可用之前编写的,而且相当多的 Oracle 人出于习惯而更喜欢旧式语法,如果没有的话别的。由于所有这些原因,仅使用旧的连接语法查找基于 Oracle 的项目是相对常见的。这本身并没有什么问题(尽管我个人更喜欢较新的语法)。

【讨论】:

  • 您的猜测完全正确,先生。谢谢,您的回答让我明白了,我不确定这两个查询是否真的会被解释为相同的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-29
  • 2012-10-25
  • 2012-07-26
  • 2011-09-16
  • 2016-08-28
  • 2011-12-24
  • 2017-05-16
相关资源
最近更新 更多