使用JOIN而不是WHERE进行过滤

Cod*_*313 11 sql

在SQL(MSSQL,Oracle等等)中,在连接表时,将过滤器添加到JOIN语句而不是在WHERE子句中有什么好处?

SELECT * FROM X INNER JOIN Y ON X.A = Y.A WHERE X.B = 'SOMETHING'
Run Code Online (Sandbox Code Playgroud)

SELECT * FROM X INNER JOIN Y ON X.A = Y.A AND X.B = 'SOMETHING'
Run Code Online (Sandbox Code Playgroud)

我意识到这并不适用于所有情况,但我注意到在某些情况下,通过将过滤条件放在JOIN语句中似乎可以获得性能提升.但是,因为它是JOIN语句的一部分,所以它也会使它表现得有些奇怪.

思考?

Ric*_*ich 5

我有时在具有大量连接的查询中执行此操作,因为它在查询的一部分中将所有关于连接的信息本地化,而不是在连接条件中有一些,而在where子句中有一些.

  • 这也是我如何使用它:从选择中分离modell(join)(where) (2认同)

Ed *_*per 5

对于INNER JOIN查询,这些过滤器的性能特征将取决于许多因素 - 表的大小,索引,查询的选择性以及特定于执行查询的RDBMS的其他因素.

LEFT和中RIGHT OUTER JOIN,过滤器的位置远远超过INNER JOIN,因为它影响是否将在(JOIN子句)之前或之后(WHERE子句)之前应用连接.

  • 换句话说,在OUTER JOIN的ON子句中包含过滤器可能(将)通过将其包含在WHERE子句中而产生不同的结果. (2认同)