带有ON的SQL Server和运算符

时间:2013-10-28 04:58:47

标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2

我正在使用SQL Server 2008 R2。

我正在进行查询,其中我使用左外连接来从两个表中获取记录。

现在,查询是这样的:

SELECT Table1.Id, Table1.Name, Table2.DeviceId
FROM Table1
LEFT OUTER JOIN Table2 ON Table1.Id = Table2.Table1Id AND Table2.DeviceId=4
WHERE Table1.Name LIKE 'xxxxxx' AND Table1.IsDeleted=0

它给了我想要的结果。

但是当我使用

SELECT Table1.Id, Table1.Name, Table2.DeviceId 
FROM Table1 
LEFT OUTER JOIN Table2 ON Table1.Id = Table2.Table1Id  
WHERE Table1.Name LIKE 'xxxxxx' AND Table1.IsDeleted=0 AND Table2.DeviceId=4

它没有给出理想的结果。

现在,我没有得到ON语句和WHERE子句中AND运算符的区别?

任何人都可以解释一下吗?

谢谢..

1 个答案:

答案 0 :(得分:2)

“理解使用外连接时,非常重要的是ON和WHERE子句扮演非常不同的角色,因此它们不可互换.WHERE子句仍然扮演一个简单的过滤角色 - 即,它保持真实使用类似的东西并在where子句中使用谓词。然而,ON子句不起简单的过滤作用;相反,它更像是一个匹配的角色。换句话说,保留了一行无论ON谓词是否找到匹配,都将返回side。因此ON谓词只确定来自非保留端的哪些行与保留端的行匹配 - 而不是是否从保留端返回行。 **考试70-461:查询Microsoft SQL Server 2012