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中文网其他相关文章!