首页 > 数据库 > mysql教程 > SQL JOIN:USING、ON 或 WHERE – 您应该选择哪种语法?

SQL JOIN:USING、ON 或 WHERE – 您应该选择哪种语法?

Susan Sarandon
发布: 2025-01-21 22:01:14
原创
932 人浏览过

SQL JOINs: USING, ON, or WHERE – Which Syntax Should You Choose?

SQL JOIN 方法比较:USING、ON 和 WHERE

SQL 提供三种语法来执行 JOIN 操作:USING、ON 和 WHERE。虽然这些语法看起来很相似,但它们会影响查询的可读性、正确性和性能。

USING 语法

USING 语法使用 USING 关键字后跟两个表共有的列名来指定连接列:

<code class="language-sql">SELECT * FROM a JOIN b USING(ID);</code>
登录后复制

ON 语法

ON 语法使用 ON 关键字和连接列之间的等式表达式来明确定义连接条件:

<code class="language-sql">SELECT * FROM a JOIN b ON a.ID = b.ID;</code>
登录后复制

WHERE 语法

WHERE 语法在一个 WHERE 子句中组合连接和过滤条件:

<code class="language-sql">SELECT * FROM a, b WHERE a.ID = b.ID;</code>
登录后复制

性能考虑

这些语法选项之间没有明显的性能差异。但是,由于潜在的歧义性,特别是涉及外部连接 (OUTER JOIN) 的查询,不建议使用 WHERE 语法。

语义差异

USING 语法只明确指定连接列,这提供了清晰度并降低了连接条件错误的风险。

ON 语法允许更复杂的连接条件,包括不等式运算符(=,!=,>)或附加连接条件(例如,AND/OR)。

WHERE 语法隐式地基于指定列的相等性执行内部连接 (INNER JOIN)。这可能导致意外的笛卡尔积或外部连接的错误结果。

示例说明

考虑以下查询:

<code class="language-sql">FROM T1,T2,T3 WHERE T1.ID = T2.ID AND T1.foo = 'bar' AND T2.fish = 42</code>
登录后复制

目前尚不清楚 T1.foo = 'bar' 是连接条件还是过滤条件。

使用 ON 语法重写查询可以提供清晰度:

<code class="language-sql">FROM T1
   INNER JOIN T2 ON T1.ID = T2.ID
WHERE
   T1.foo = 'bar' AND T2.fish = 42</code>
登录后复制

结论

虽然 USING、ON 和 WHERE 语法选项都可以完成 JOIN 操作,但 ON 语法通常更受青睐,因为它在处理外部连接方面具有更好的可读性、正确性和一致性。USING 语法提供了简洁性,而由于其潜在的歧义性,应避免使用 WHERE 语法。

以上是SQL JOIN:USING、ON 或 WHERE – 您应该选择哪种语法?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板