SQL JOIN 方法:USING、ON 和 WHERE 的性能和语法差异
SQL 提供多种连接表的选项:USING、ON 和 WHERE。虽然这些选项的功能相似,但对它们的性能和语法含义的误解可能会出现。本文探讨了这些连接方法之间的差异。
性能方面
与普遍看法相反,这三种连接方法之间没有明显的性能差异。所有三种方法都会生成相同的优化查询计划。
语法和语义
ANSI 语法:
USING 语法:
“join the where”(隐式 INNER JOIN)的歧义性
使用 WHERE 子句指定连接条件可能会导致歧义,尤其是在外部连接类型中。这个问题源于 SQL Server 中的逻辑查询处理顺序,其中 FROM 在 WHERE 之前进行评估。“join the where”可能会无意中创建笛卡尔积或产生意外结果。
语法歧义:
以下两个查询说明了在 WHERE 子句中混合隐式内部连接与 FROM 子句中显式外部连接时可能出现的语法歧义:
<code class="language-sql">FROM T1, T2, T3 WHERE T1.ID = T2.ID AND T1.foo = 'bar' AND T2.fish = 42 FROM T1 INNER JOIN T2 ON T1.ID = T2.ID INNER JOIN T3 ON T1.ID = T3.ID WHERE T1.foo = 'bar' AND T2.fish = 42</code>
歧义源于无法清楚地确定哪些连接是外部连接,哪些是内部连接。
建议:
为了清晰、一致性和与现代 SQL 标准的兼容性,建议:
以上是SQL 连接:USING、ON 和 WHERE 之间的性能和语法差异是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!