第二个查询是第一个查询的缩写形式吗?第二个是做隐式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
答案 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
第一个查询是正确的,我们可以使用连接在条件上应用更多过滤器 - 左外连接, 正确的外部加入, 完全外部加入 等