【问题标题】:What is the difference between these two SQL queries这两个 SQL 查询有什么区别
【发布时间】:2012-04-19 05:20:23
【问题描述】:

第二个查询是第一个查询的缩写形式吗?第二个是在做类似隐式 JOIN 的事情吗?他们都返回相同的结果......所以我想知道哪个更好用。使用 SQL Server 2008。感谢您的回答。

第一次查询

SELECT b.columnOne, a.columnTwo
FROM tableA As a JOIN tableB As b ON a.id = b.id 

第二次查询

SELECT b.columnOne, a.columnTwo 
FROM tableA As a, tableB as b
WHERE a.id = b.id

【问题讨论】:

    标签: sql database select join


    【解决方案1】:

    第一个查询是正确的。
    第二个查询的执行计划被“翻译”为第一个,因为引擎知道您正在连接表,所以在这种情况下它们是相同的
    无论如何,当您使用涉及多个相关表的查询时,您应该始终使用 JOIN 语法(因为它是为此而生的)并避免 WHERE: 使用后者,如果引擎无法转换为 JOIN 语法,您可以创建大量查询,因为您将每个表中的记录数相乘(称为笛卡尔积)。

    【讨论】:

    • 它仍然是有效的 JOIN 语法,Marco。它只是一个过滤的笛卡尔积。
    • @JNK:是的,我知道,但请阅读我回答的最后一部分。我试图告诉 OP 他应该使用 JOIN 来加入表和 WHERE 进行过滤;)
    • 是的,我明白了,马可。只是想澄清一下不需要“翻译”,因为这是一种有效的(如果不太清楚和较少使用)JOIN 语法。
    【解决方案2】:

    它们是相同的。第二个是使用 ANSI 标准连接,而第一个是。

    许多(尽管不是全部)开发人员更喜欢第一个版本(ANSI 标准),因为它将JOIN 逻辑保留在一个位置。它允许将过滤逻辑保留在WHERE 子句中。

    【讨论】:

      【解决方案3】:

      在我看来,单独指定连接(第一种形式)更简洁。然后您可以在 WHERE 子句中添加您的搜索条件。但是是的,这两种形式是等价的。

      【讨论】:

        【解决方案4】:

        两个查询都将返回相同的结果,

        查看有关 MS SQL 连接的文章 - http://www.codeproject.com/Articles/102805/SQL-Joins

        第一个查询是正确的,我们可以使用连接对条件应用更多过滤器 - 左外连接, 右外连接, 全外连接 等等

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-08
          • 2010-12-19
          • 1970-01-01
          • 2012-08-05
          • 1970-01-01
          • 2017-04-19
          • 1970-01-01
          相关资源
          最近更新 更多