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

时间:2016-04-01 04:56:56

标签: mysql sql join implicit

因此,我并不真正理解在SQL中使用隐式连接的目的。在我看来,它使得在代码中更难以发现联接,我想知道这一点:

除了它的简单性之外,是否有更大的目的实际想要这样做?

3 个答案:

答案 0 :(得分:1)

Explicit vs implicit SQL joins

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

答案 1 :(得分:1)

从根本上说,隐式连接和显式JOIN之间没有区别.ON。执行计划是一样的。

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

答案 2 :(得分:0)

其他人从大多数人对“隐式 JOIN”的理解的角度回答了这个问题,一个 INNER JOIN 产生于在 WHERE 子句中带有连接谓词的表列表。但是,我认为还值得一提的是“隐式 JOIN”的概念,因为一些 ORM 查询语言理解它,例如 Hibernate's HQLjOOQDoctrine 以及可能其他的。在这些情况下,连接被表达为查询中任何位置的路径表达式,例如

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

其中路径 b.author 使用两个表之间的外键将 AUTHOR 表隐式连接到 BOOK 表。您的问题仍然适用于这种类型的“隐式连接”,答案是相同的,有些用户可能会发现这种语法比显式语法更方便。它没有其他优势。

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