USING关键字 vs ON子句 - MYSQL

62

可能是重复问题:
MySQL ON vs USING?


查询1:

SELECT *
FROM users
JOIN orders ON (orders.user_id = users.user_id)
WHERE users.user_id = 1;

查询2:

SELECT *
FROM users
JOIN orders USING (user_id)
WHERE user_id = 1;

我想连接订单和用户表以获取某些特定数据。它运行良好。我的问题是,由于两个查询输出相同的结果集,它们是相同的吗?哪一个更有效?哪一个对性能更好?哪一个是最佳实践?


2
是的。 你进行了基准测试吗?你的编码标准是什么? - Ben
2
这不是已经讨论过了吗?(参见:https://dev59.com/iWgu5IYBdhLWcg3wYWFX) - Geo
1个回答

73

当我们从多个表中检索数据时,不需要在JOIN条件中提及USING子句。使用USING子句时,该特定列名应存在于两个表中,并且SELECT查询将使用USING子句中给定的列名自动连接这些表。

例如,如果表中有两个公共列名,则在USING子句中提及所需的公共列名。

执行动态SQL时,也可以使用USING,如下所示:

EXECUTE IMMEDIATE 'DELETE FROM dept WHERE deptno = :num'
  USING dept_id; 
  • USING子句: 允许您按名称指定联接键。

  • ON子句: 该���法允许您在两个表中指定连接键的列名。

使用USING子句

如果多个列具有相同的名称,但您不想使用所有这些公共列进行连接,则使用USING子句。在语句中,列在USING子句中列出,不能有任何限定符,包括WHERE子句。

使用ON子句

当两个表中的列名不匹配时,使用ON子句来连接表。连接条件从WHERE子句中的过滤条件中删除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接