当前位置: 首页 > 面试题库 >

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

聂华翰
2023-03-14
问题内容

这个问题已经在这里有了答案

8年前关闭。

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

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


问题答案:

从多个表中检索数据时,该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子句中的过滤条件中删除。



 类似资料:
  • 我有一个简单的查询,结尾如下... 它一点也不费力(当我使用 Sequel Pro 直接在我的 MySQL 数据库中运行它时,它会立即/正确运行)。 但当通过PHP文件运行时,它会返回一个500错误。我所要做的就是删除对DESC的引用(要么完全删除,要么替换为ASC),然后从DB中获取结果。 不过,我真的需要按降序排列结果,对这个非常奇怪的问题完全没有想法。 有没有人见过DESC关键字的类似行为?

  • 问题内容: 这个问题已经在这里有了答案 : 如何在LIMIT子句中应用bindValue方法? (10个答案) 5年前关闭。 使用PDO(我正在使用具有Apache 2.2.21,PHP最高为5.3.6和MySQL 5.5.9的MAMP 2.0.5)准备的语句,如果我使用 有用。 我在MySQL的错误中看到这是先前版本中的错误,但我不知道是否仍要解决。 如果仍然存在问题,是否可以通过另一种方式选择

  • 问题内容: 我有以下 我尝试使用C#中的SQL连接运行此命令,但收到错误消息: CREATE FUNCTION’必须是查询批处理中的第一条语句。必须声明标量变量“ @input”。 如何在C#中运行它? 问题答案: 不是SQL概念;它在语法上根本不存在。 SSMS通过解析SQL并识别(和)用法来允许它,并将 您的命令分为几部分 ;然后,它们将这些片段作为独立的命令一个接一个地发布。这样做完全是由S

  • 本文向大家介绍使用MySQL EXPLAIN关键字获取信息?,包括了使用MySQL EXPLAIN关键字获取信息?的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表- 这是在列上创建索引的查询- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是使用EXPLAIN的查询- 这将产生以下输出-

  • 问题内容: 创建表时如何使用关键字? 假设我要创建两个表,并且我希望业余爱好表ID引用人员的ID? 我怎么做? 问题答案: 与此类似,创建兴趣表:

  • 问题内容: 我的数据库中有三个表: 这些表中的每个表都有两个字段,分别称为“内容”和“标题”。我希望能够在我的sql语句中使用“赞”来查看“ messages.content”,“ messages.title”,“ topics.content”,“ topics.title”,“ comments.content”和“ comments”。标题”使用关键字。 到目前为止,我的查询仅能从一张表中