Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 过滤连接:WHERE vs.ON_Sql_Sql Server 2008_Join_Where - Fatal编程技术网

Sql 过滤连接:WHERE vs.ON

Sql 过滤连接:WHERE vs.ON,sql,sql-server-2008,join,where,Sql,Sql Server 2008,Join,Where,我对使用ON和WHERE过滤联接的理解是否正确 其中 …将过滤已联接表的结果,这意味着左联接或右联接不会显示所需表中的所有记录,因为它们将被过滤掉,即使WHERE过滤器可能位于另一个表中的字段上 开启 …可用作正在联接的表的筛选器。我过去认为上的仅用于在连接两个表时比较两个表之间的字段,但它也可以像一个独立的,其中用于连接特定表 当您只连接两个表时,这一切都不重要,但我逐渐意识到,在3个以上的表之间进行非常大的连接时,理解差异是至关重要的。的 ON子句和WHERE子句中的条件之间的区别当然是

我对使用
ON
WHERE
过滤联接的理解是否正确


其中
…将过滤已联接表的结果,这意味着
左联接
右联接
不会显示所需表中的所有记录,因为它们将被过滤掉,即使
WHERE
过滤器可能位于另一个表中的字段上

开启
…可用作正在联接的表的筛选器。我过去认为上的
仅用于在连接两个表时比较两个表之间的字段,但它也可以像一个独立的
,其中
用于连接特定表


当您只连接两个表时,这一切都不重要,但我逐渐意识到,在3个以上的表之间进行非常大的连接时,理解差异是至关重要的。

ON子句和WHERE子句中的条件之间的区别当然是灰色的

对于内部联接,它们是等价的。对于外部联接,您的理解是正确的,WHERE子句在概念上是在ON条件被计算之后应用的

但在许多情况下,差异更多地取决于意图而非功能。ON条件和WHERE子句之间通常存在语义差异

例如,较旧版本的SQL Server确实使用WHERE子句中的条件实现了ON语法,使用了
*=
=*
语法来表示左连接或右连接(在某些情况下,这会导致左连接和右连接等价物产生奇怪的细微差异)


一般来说,我的建议是始终使用ON子句中适当的键字段,根据记录如何相互关联的逻辑连接记录。使用WHERE子句应用逐步限制此结果集的过滤条件。

上的
用于连接条件,它将仅过滤
内部连接的结果
您的问题是否真的是关于两者之间的区别?目前,您似乎在问两个问题,
在哪里
做什么,以及
上做什么?检查这个问题它对此有一些很好的答案