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

在from子句或where子句中进行等值联接是否更好?

许明朗
2023-03-14
问题内容

当在主键列上连接两个简单表并放置附加相等条件时,可以在连接本身或where子句中完成。

例如,以下等价。 我的问题是-是否有理由使用一种样式而不是另一种样式?

SELECT * 
FROM A
INNER JOIN B ON A.A_ID = B.A_ID
            AND A.DURATION = 3.00

…对比:

SELECT * 
FROM A
INNER JOIN B ON A.A_ID = B.A_ID
WHERE A.DURATION = 3.00

问题答案:

这是样式问题。通常,您需要将定义结果集的“形状”的条件放在FROM子句中(即那些控制每个表的哪些行应连接在一起以产生结果的条件),而那些条件将对结果进行
过滤 set应该在WHERE子句中。对于INNER JOIN,效果是相同的,但是一旦包含OUTER JOIN(左,右),感觉就会更加清晰。

在您的第一个示例中,我剩下的问题是“这与表B有什么关系?”
当我在JOIN中遇到这种奇怪的情况时。而在第二个中,如果我不感兴趣,则可以跳过FROM子句(和所有JOIN),只是在WHERE子句中看到确定行是否要返回的条件。



 类似资料:
  • 问题内容: 我正在尝试比较两个表以在每个表中找到不在另一个表中的行。表1的groupby列用于在表1中创建2组数据。 表2只有一栏。 因此,表1在组2中具有值1,2,4,表2具有值1,3,4。 加入第2组时,我期望得到以下结果: 我可以使它起作用的唯一方法是在第一个联接中放置where子句: 第二个在“打开”中有一个过滤器: 谁能提出一种不在on子句中而是在where子句中使用过滤器的方法? 上下

  • 我正在为一个SQL的实现工作,它应该在Where和Having子句之间使用联合操作来显示结果。例如, sql语句的目的是返回同时满足where和having条件的结果集。 resultset1<=select*from table1,其中col1='get';resultset2<=select*from table1 group by col2 avg(col3)>30 final result

  • 问题内容: 对于我因此遇到的所有Dockerfile(虽然数量不多),它们所有人都使用了子句作为现有映像的基础,即使它是。 这个条款是必需的吗?有没有子句的Dockerfile是否可能?这样创建的容器可以执行任何操作吗? 编辑 我读 没有FROM指令的Dockerfile没有父映像,称为基本映像。 https://docs.docker.com/glossary/?term=parent%20im

  • 本章提供了有关如何使用JDBC应用程序从表中选择记录的示例。 这将在从表中选择记录时使用WHERE子句添加其他条件。 在执行以下示例之前,请确保您具备以下示例 - 要执行以下示例,您可以使用实际用户名和密码替换用户名和密码。 您的MySQL或您正在使用的任何数据库已启动并正在运行。 所需的步骤 (Required Steps) 使用JDBC应用程序创建新数据库需要以下步骤 - Import the

  • 问题内容: 我有一个这样的表“ bla”: 如果我做SQL查询 我只得到ID为2的记录。我没有ID为3的记录,其中fk为空。我以为NULL!=4。看来这是错误的。 为什么会这样呢? 问题答案: 不等于任何东西。您需要明确接受null: 有关处理的更多信息,请参见使用NULL。

  • 问题内容: 我今天输入了错误的查询,但它仍然有效,并给出了预期的结果。我的意思是运行此查询: 但是我不小心跑了这个查询 (请注意,而不是最后一个子句中的) 并且都从用户ID返回了正确的员工ID。 这两个查询有什么区别?第二种形式是否仅联接满足条件的2个表的成员,而第一种形式将联接整个表,然后运行查询?一个效率比另一个效率高吗?还有其他我想念的东西吗? 谢谢! 问题答案: 对于这样的内部联接,它们在