sql 中的 IMPLICIT JOIN 的目的是什么?

What's the purpose of an IMPLICIT JOIN in sql?

所以,我不太明白在 SQL 中使用 隐式连接 的目的。在我看来,这使得在代码中更难发现连接,我想知道这一点:

除了简单之外,真正想要这样做还有更大的目的吗?

Explicit vs implicit SQL joins

当你连接多个表时,不管连接条件怎么写,反正优化器会选择它认为最好的执行计划。至于我: 1)隐式连接语法更简洁。 2) 更容易自动生成,或使用其他 SQL 脚本生成。 所以我有时会用它。

从根本上说,隐式连接和显式连接 .. ON 之间没有区别。执行计划相同。

我更喜欢显式表示法,因为它更易于阅读和调试。 此外,在显式表示法中,您定义了 ON 子句中的表与 WHERE 子句中的搜索条件之间的关系。

其他人从大多数人理解的“隐式 JOIN”的角度回答了这个问题,一个 INNER JOIN 来自 table 列表,在 WHERE 子句中有连接谓词.但是,我认为还值得一提的是“隐式 JOIN”的概念,因为某些 ORM 查询语言可以理解它,例如 Hibernate's HQL or jOOQ or Doctrine 和可能的其他语言。在这些情况下,连接在查询中的任何地方都被表达为路径表达式,例如

SELECT 
  b.author.first_name, 
  b.author.last_name, 
  b.title, 
  b.language.cd AS language
FROM book b;

其中路径 b.author 使用两个 table 之间的外键将 AUTHOR table 隐式连接到 BOOK table秒。对于这种类型的“隐式连接”,您的问题仍然存在,答案也是一样的,一些用户可能会发现这种语法比显式语法更方便。没有别的优势了。

免责声明:我在 jOOQ 背后的公司工作。