哪种连接语法更好?

问题描述 投票:4回答:1

因此我们正在从Informix迁移到Sql Server。而且我注意到在Informix中,查询是以这种方式编写的:

select [col1],[col2],[col3],[col4],[col5]
from tableA, tableB
where tableA.[col1] = table.[gustavs_custom_chrome_id]

而我在SQL Server中编写的所有查询均写为:

select [col1],[col2],[col3],[col4],[col5]
from tableA 
inner join tableB on tableA.[col1] = table.[gustavs_custom_chrome_id]

现在,我的第一个想法是:第一个查询是错误的。它可能创建了这个庞大的记录集,然后使用Where子句缩小到实际的记录集。因此,这对性能不利。而且不是安西。所以这是双重的坏。

但是,经过一番谷歌搜索后,从理论上讲,它们似乎几乎是相同的。而且它们都符合ANSI。

所以我的问题是:

  1. 两个查询执行相同吗? IE浏览器运行速度一样快,并且总是给出相同的答案。
  2. 两者都符合ANSI标准吗?
  3. 我有什么突出的理由要追求一种风格而不是另一种?还是我应该一个人呆着好?注:这些只是查询的示例。我已经看到一些查询(第一种查询)一次最多可连接5个表。
sql-server tsql join informix ansi
1个回答
17
投票
嗯,“更好”是主观的。这里有一些风格。但我会直接解决您的问题。

    两者都执行相同
  1. 均符合ANSI。
  2. 第一个示例的问题是

    • 很容易无意间得出叉积(因为更容易省略连接条件)
    • 随着向联接中添加越来越多的表,调试联接条件也变得困难
    • 由于不赞成使用旧样式的外部联接(* =)语法(it has long been documented to return incorrect results),因此当您需要引入外部联接时,需要混合使用新样式和旧样式联接...为什么要促进不一致?
    • 虽然并非最佳做法的权威,Microsoft recommends explicit INNER/OUTER JOIN syntax
    • 使用后一种方法:

        无论内部/外部,您都使用一致的连接语法
    • 意外获得叉积更困难(并非不可能)>>
    • 从过滤条件中分离出连接条件可以使调试更加容易
  3. 我写了the post Kevin pointed to
© www.soinside.com 2019 - 2024. All rights reserved.