这两个SQL查询之间有什么区别

时间:2012-04-05 13:00:17

标签: sql database select join

第二个查询是第一个查询的缩写形式吗?第二个是做隐式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

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

第一个查询是正确的,我们可以使用连接在条件上应用更多过滤器 -     左外连接,     正确的外部加入,     完全外部加入 等