因此,我并不真正理解在SQL中使用隐式连接的目的。在我看来,它使得在代码中更难以发现联接,我想知道这一点:
除了它的简单性之外,是否有更大的目的实际想要这样做?
答案 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 HQL 或 jOOQ 或 Doctrine 以及可能其他的。在这些情况下,连接被表达为查询中任何位置的路径表达式,例如
SELECT
b.author.first_name,
b.author.last_name,
b.title,
b.language.cd AS language
FROM book b;
其中路径 b.author
使用两个表之间的外键将 AUTHOR
表隐式连接到 BOOK
表。您的问题仍然适用于这种类型的“隐式连接”,答案是相同的,有些用户可能会发现这种语法比显式语法更方便。它没有其他优势。
免责声明:我为 jOOQ 背后的公司工作。