在SQL语句中使用'IN'和子查询

Osh*_*Nad 7 sql t-sql sql-server sql-in

在我们可以使用JOIN的地方使用SQL语句中的"IN"关键字是否存在任何性能问题?

SELECT xxx
FROM xxx
WHERE ID IN (SELECT Id FROM xxx)
Run Code Online (Sandbox Code Playgroud)

gbn*_*gbn 10

不,可以使用.

您可以在所有RDBMS中使用IN,EXISTS编写上面的查询,有些还支持INTERSECT.

从语义上讲,这是一个半连接,"给我表A中的行,其中我在tableB中至少有一个匹配".INNER JOIN是"给我所有匹配的行"

因此,如果TableA有3行,TableB有5行匹配:

  • INNER JOIN是15行
  • 半连接是3行

这就是我和其他SQL类型推送IN和EXISTS的原因:JOIN错误,需要DISTINCT并且速度会慢.

EXISTS支持多列JOIN,IN不在SQL Server中(在其他情况下也是如此).