JOIN 操作中 ON 子句与 WHERE 子句
使用 INNER JOIN 操作时,ON 子句和 WHERE 子句都可以用于过滤数据。虽然它们在某些情况下看起来可以互换,但存在一些值得注意的细微差别。
ON 子句
ON 子句用于指定必须满足的特定条件要包含在连接结果中的行。它在连接级别过滤数据,确保仅合并两个表中满足指定条件的行。
WHERE 子句
WHERE 子句用于过滤连接操作发生后的行。它将条件应用于组合数据集,进一步细化结果。
性能注意事项
一般来说,使用 ON 子句或 WHERE 子句之间没有显着的性能差异用于过滤 INNER JOIN 操作中的数据。不过,也有例外。
外连接
使用外连接(例如 LEFT OUTER JOIN)时,过滤条件的放置可能会影响结果。在 ON 子句中应用过滤器将从右表(对于 LEFT OUTER JOIN)中排除不满足条件的行。另一方面,在 WHERE 子句中应用过滤器将在连接后过滤组合数据集中的行,从而可能返回更多行。
示例:
考虑以下示例:
SELECT * FROM Foo f LEFT OUTER JOIN Bar b ON (b.BarId = f.BarId) AND (b.IsApproved = 1);
在本例中,将 ON 子句与过滤器一起使用 (b.IsApproved = 1)将从 Bar 中排除 IsApproved 未设置为 1 的所有行。
或者,
SELECT * FROM Foo f LEFT OUTER JOIN Bar b ON (b.BarId = f.BarId) WHERE (b.IsApproved = 1);
这将首先执行联接操作,然后根据 IsApproved 条件过滤结果集,可能会从 Bar 返回 IsApproved 为 NULL 的行。
其他注意事项
以上是JOIN 中的 ON 与 WHERE 子句:何时应该使用 Which?的详细内容。更多信息请关注PHP中文网其他相关文章!