SQL Server:“in”和“join”语法之间的区别?

时间:2021-02-13 18:45:49

标签: sql sql-server tsql join inner-join

我认为下面显示的两个 SQL 语句在功能上是相同的,但显然我错了,因为它们返回不同的结果。

谁能解释一下?

select count(*) 
from t 
where t.id in (select distinct v_id from v)

select count(*) 
from t 
join v on t.id = v.v_id

2 个答案:

答案 0 :(得分:2)

JOIN 可以通过两种方式更改查询中的行数:

  1. 当值不匹配时,行将被过滤掉。
  2. 当表有重复项时,结果集就会有这些重复项。

IN 过滤掉不匹配的值。但是,如果 v 有重复项,它不会生成重复项。如果结果不同,则表明 vv_id 有重复项。

答案 1 :(得分:0)

让我们试着用简单的话来解释。 如果 t.id 在表 v

中,第一个查询将从 t 返回 count(*)

但是第二个查询将首先连接带有 id 和 v_id 的两个表。然后它会从他们的连接表中返回计数。

例如,如果 t 的 id 为 1、2 和 1,而 v 的 id 为 1 和 2

select count(*) from t where t.id in (select distinct v_id from v)
and 
select count(*) from t join v on t.id = v.v_id

两个查询都将返回与 count: 3 相同的结果

select count(*) from v where t.v_id in (select distinct id from t)
and 
select count(*) from t join v on t.id = v.v_id

将返回不同的结果。第一个查询将返回 2,但第二个查询将返回 3。

如果表中有重复值,Join 可以增加行数。

相关问题