使用关键字与 ON 子句 - MYSQL [重复]

Posted

技术标签:

【中文标题】使用关键字与 ON 子句 - MYSQL [重复]【英文标题】:USING Keyword vs ON clause - MYSQL [duplicate] 【发布时间】:2012-11-24 20:49:43 【问题描述】:

可能重复: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;

我想加入订单和用户表以获取某些数据。它工作正常。我的问题是因为两个查询都输出相同的结果集,是一样的吗?使用哪一种效率更高?哪一个对性能好?哪一个是最佳实践?

【问题讨论】:

Yes. 你基准测试了吗?你有基准吗?你的编码标准是什么? 不是already discussed一次吗? 【参考方案1】:

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

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

USING 也用于执行动态 SQL,如下所示:

EXECUTE IMMEDIATE 'DELETE FROM dept WHERE deptno = :num'
  USING dept_id; 

USING 子句:这允许您按名称指定连接键。

ON 子句:此语法允许您为两个表中的连接键指定列名。

USING 子句

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

ON 子句

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

【讨论】:

以上是关于使用关键字与 ON 子句 - MYSQL [重复]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL错误1054未知列'persons.PersonID' in on子句[重复]

MySQL 多表连接内连接

MYSQL CONCAT 停止使用 WHERE 子句处理连接表 [重复]

(主键策略)ON DUPLICATE KEY UPDATE(Mysql的使用)

没有on子句的连续连接[重复]

Sqoop 导入失败,“on 子句”中有未知列