2012-04-05 65 views
2

第二个查询是第一个查询的简写形式吗?第二个是做一个隐式JOIN?他们都返回相同的结果...所以我想知道哪一个更好用。使用SQL Server 2008.感谢您的回答。这两个SQL查询有什么区别

首先查询

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

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

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

1

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

+1

它仍然有效JOIN语法,马可。它只是一个过滤笛卡尔产品。 – JNK 2012-04-05 13:05:32

+0

@JNK:是的,我知道,但请阅读我答案的最后部分。我试图告诉OP他应该使用JOIN加入表中的某个地方进行筛选;) – Marco 2012-04-05 13:07:44

+0

是的,我明白了,Marco。只是想澄清没有“翻译”需要,因为这是一个有效的(如果不太清楚和较少使用)'JOIN'语法。 – JNK 2012-04-05 13:08:29

0

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

0

无论是查询将返回相同的结果,

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

首先查询是正确的,我们可以用加入的条件申请更多的过滤器 - 左外连接, 右外连接, 全外连接 等