0

可能重复:
显式与隐式 SQL 连接

Stmt1: SELECT ... FROM ((a JOIN b ON <cond1>) JOIN c ON <cond2>)

Stmt2: SELECT ... FROM a, b, c WHERE <cond1> AND <cond2>

我不确定第二个语句是否可以提供较小的结果集。如果 B 中有几行与 A 中的一行匹配,我们是否可以通过第二条语句获得所有这些匹配?

4

2 回答 2

2

最后的结果是,是的。关于执行:查询优化器最终可能会为两个查询创建相同的查询执行计划。

如果根据其近似统计数据(例如,近似等深度直方图 - 顺便说一下,它们并非一直都是最新的),优化器将确定第一个连接比第二个,因此,它将首先执行这个。

Stmt1 允许您指定连接的顺序,并且考虑到您确切知道表包含什么,这可能是一个更好的解决方案。

于 2012-07-11T17:12:49.233 回答
1

从语义上讲,查询将是相同的。然而,试图依靠计划来证明这一点并不是一个好主意。

也可以随意插入,<cond1>这样<cond2>查询在第二种形式中是有效的,但在第一种形式中是不合法的。

从这个意义上说,第二个更一般,但只要第一个好,那么第二个就是等效的。

于 2012-07-11T18:11:51.463 回答